【发布时间】:2015-10-12 23:18:03
【问题描述】:
我需要运行一些在 Android 项目的 assemble* 任务完成后发生的任务。特别是,这些任务需要知道特定构建变体的所有已编译类的输出目录是什么。如何检索 assembleFlavor1Debug 任务的输出目录?
我目前的解决方法是这样的(尽管这种解决方法存在其自身的问题,例如即使它被放置在 android 配置块之后也无法找到组装任务):
android.buildTypes.all { theBuildType ->
android.productFlavors.all { theFlavor ->
String capitalizedType = ... //Type name with first letter capitalized
String capitalizedFlavor = ... //Flavor name with first letter capitalized
...
project.tasks["assemble${capitalizedType}${capitalizedFlavor}"].configure {
doLast {
project.ext.variantOutput = "build/intermediates/classes/${theFlavor.name}/${theBuildType.name}"
}
}
}
}
编辑 #1:我能够修复我的解决方法。主要问题是 Android assemble* 任务(assembleProdDebug、assembleProdRelease 等)尚未在项目中创建,即使配置是在 Android 配置块之后发生的。通过将上面的整个代码 sn-p 包含在 gradle.taskGraph.whenReady {...} 块中,我能够完成 assemble* 任务的附加配置,但这确实意味着我失去了继续配置依赖关系图的能力。幸运的是,在我的特定情况下不配置依赖项并不是重大损失;我所需要的只是能够记录最后组装的构建类型和产品风味。
我还想指出,此行为适用于 Android Gradle 插件的 1.0.0 版。虽然我没有检查过,但在此插件的较新版本上可能不会出现这些 Android 任务的缺失。
编辑 #2:所以我也尝试了 Android Gradle 插件的 1.3.0 版。我还想指出,这是 LIBRARY Android 插件,而不是应用程序插件(我怀疑这些缺少的 assemble* 任务也不会在应用程序插件的项目配置期间生成)。
【问题讨论】:
标签: android gradle android-gradle-plugin