诉求
在打包过程中我想知道某个模块的信息,比如:
- 模块
androidx.work:work-runtime
是否被依赖? - 模块
androidx.work:work-runtime
的版本号是多少?
我们利用 Android studio 已有的任务androidDependencies
,双击执行很容易知道模块的信息,但是我想在 gradle 打包插件里面知道这个信息。根据模块是否存在指定某些操作;拿到模块的版本号判断是否执行某个操作,怎么办呢?
试探
**不满足需求:**使用这个输出的依赖只有一小部分,依赖不完全
configurations.all {
project.configurations.implementation.allDependencies.each { dep ->
println("依赖项 implementation dependencies:" + dep.group + ":" + dep.name + ":" + dep.version)
}
}
满足需求: 全部依赖,获得的依赖和 androidDependencies 获取的一致
只是这个返回需要一定时间获取依赖项,并且要去重。
/**
* 加载所有依赖项
*
* @param project
* @param callback
*/
static void loadAddDependencies(Project project, DependenciesCallback callback) {
def dp = new ArrayList()
project.configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
String module = details.requested.module.group + ":" + details.requested.module.name + ":" + details.requested.version
if (!dp.contains(module)) {
dp.add(module)
}
callback.onResult(dp)
}
}
}
还有常用的方法:排除某个模块
/**
* 排除模块
* @param project
* @param excludeList
*/
static void excludedDependencies(Project project, List<Pair> excludeList) {
if (CommUtils.isEmptyOrNoExists(excludeList)) {
return
}
project.configurations.all {
resolutionStrategy {
excludeList.each {
exclude group: it.first, module: it.second
}
}
}
}