Gradle如何排除aar中旧版Timber并使用指定新版本?
我来帮你解决这个Timber版本冲突的问题!你之前的exclude配置没生效,是因为搞错了冲突的来源——abc.aar里的timber.jar是直接打包在aar内部的,不是通过Gradle依赖传递过来的,所以普通的exclude module根本碰不到它。
方案1:用packagingOptions直接排除旧版Timber的类文件
这是最直接的解决办法,咱们要做的就是让编译工具忽略掉abc.aar里的旧版Timber类,只保留你引入的4.7.0版本。在你的库模块的build.gradle里这么写:
android { packagingOptions { // 精准排除旧版Timber的所有类文件 exclude 'com/jakewharton/timber/**' } } dependencies { // 无需再加exclude,直接依赖abc.aar implementation(name: 'abc-aaa', ext: 'aar') // 引入你需要的新版Timber implementation 'com.jakewharton.timber:timber:4.7.0' }
注意:如果你用的是较旧的Gradle版本还在使用compile,建议换成implementation——官方已经废弃compile,implementation是更规范的依赖声明方式。
方案2:确认是否为依赖传递导致的冲突(备选)
万一你之前看错了,abc.aar其实是通过依赖链引入的Timber(而非直接打包jar),可以先执行命令查看依赖树:
./gradlew dependencies --configuration implementation
在输出里找到abc-aaa下的Timber依赖,再调整exclude的写法:
dependencies { implementation(name: 'abc-aaa', ext: 'aar') { // 按group和module精准排除传递依赖 exclude group: 'com.jakewharton.timber', module: 'timber' } implementation 'com.jakewharton.timber:timber:4.7.0' }
按照你描述的abc.aar的lib目录包含timber.jar的情况,方案1应该就能解决问题。配置完成后记得执行clean和build,确保没有类冲突报错,也可以检查最终打包产物里的Timber类版本,确认是否使用了4.7.0版本。
内容的提问来源于stack exchange,提问作者subair_a
相关产品推荐
相关产品推荐

