一个工程, 依赖的第三方包
越来越多的时候, 肯定是会出现多个包同时引入了同一个库
的不同版本
.
如果不出问题, 大部分同学应该不会注意到版本冲突的问题
, 但是本着对代码负责的原则, 我们还是需要主动解决的.
手动打印依赖信息
gradlew app:dependencies
gradlew app:dependencies > log.txt
本脚本的功能
- 自动打印出版本冲突的依赖包
- 支持配置指定某个包的强制版本号
源代码
ext._allVersion = [:]
ext._logVersion = []
ext._logConfigError = false
project.configurations.all { defaultConfiguration ->
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
def packageName = "${requested.group}:${requested.name}"
def versionArray = _allVersion[packageName]
if (versionArray == null) {
versionArray = []
_allVersion[packageName] = versionArray
}
def find = versionArray.any {
it == requested.version
}
if (!find) {
_allVersion[packageName] += requested.version
if (versionArray.size > 1) {
error "${packageName} -> ${versionArray}"
}
}
try {
if (versionConfig instanceof Map) {
versionConfig.each { key, value ->
if (key == packageName) {
def originVersion = requested.toString()
if (value == '') {
println originVersion
} else if (requested.version != value) {
def log = _logVersion.any {
it == packageName
}
if (!log) {
println "${originVersion} -> ${value}"
}
_logVersion += packageName
details.useVersion value
}
}
}
}
} catch (Throwable throwable) {
if (throwable instanceof MissingPropertyException) {
if (!_logConfigError) {
error "未找到强制版本配置信息[ext.versionConfig]."
}
_logConfigError = true
} else {
throwable.printStackTrace()
}
}
}
}
static def error(Object msg) {
System.err.println msg
}
使用方式
- 复制源代码到工程任意路径
- 在
App
工程的build.gradle
文件最后一行, 使用 apply from: 文件路径
即可
注意:
配置格式, 全局配置可以放在脚本 [apply]
之前的任意地方
ext.versionConfig = [
"androidx.core:core" : "1.0.0",
"androidx.annotation:annotation" : "1.0.0",
"androidx.arch.core:core-common" : "2.0.0",
"org.jetbrains.kotlin:kotlin-stdlib" : "1.3.50",
"org.jetbrains.kotlin:kotlin-stdlib-common": "1.3.50",
]
日志可以在gradle
控制台查找. 通常是 AS
的Build
窗口.
大致的日志格式如下:
org.jetbrains.kotlin:kotlin-stdlib:1.3.21 -> 1.3.50
androidx.annotation:annotation:1.1.0 -> 1.0.0
androidx.core:core:1.1.0-rc01 -> 1.0.0
androidx.core:core -> [1.1.0-rc01, 1.1.0-rc02]
androidx.annotation:annotation -> [1.1.0, 1.0.0]
androidx.arch.core:core-common:2.1.0-rc01 -> 2.0.0
androidx.arch.core:core-common -> [2.0.0, 2.1.0-rc01]
org.jetbrains.kotlin:kotlin-stdlib -> [1.3.21, 1.3.50]
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.31 -> 1.3.50
群内有各(pian)种(ni)各(jin)样(qun)
的大佬,等你来撩.
联系作者
点此QQ对话 该死的空格
点此快速加群
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)