pat*_*ckf 27 android gradle android-gradle-plugin
Gradle的Android插件为每个BuilType/Flavor/BuildVariant生成一项任务.问题是这个任务将动态生成,因此在定义这样的任务时不会作为依赖项提供:
task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) {
//do smth
}
Run Code Online (Sandbox Code Playgroud)
这个答案的建议解决方法就是这样
task myTaskOnlyForDebugBuildType(dependsOn:"assembleDebug") {
//do smth
}
Run Code Online (Sandbox Code Playgroud)
或这个
afterEvaluate {
task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) {
//do smth
}
}
Run Code Online (Sandbox Code Playgroud)
但两者都不适合我.
pat*_*ckf 41
这里是如何做到这一点的完整示例通过这个帖子的启发: (Android插件v.0.9.2和gradle这个1.11在写作的时候)
我们将定义一个仅在我们构建"debugCustomBuildType"时运行的任务
android {
...
buildTypes {
debugCustomBuildType {
//config
}
}
}
Run Code Online (Sandbox Code Playgroud)
定义应该仅对特定的builtType/variant/flavor执行的任务
task doSomethingOnWhenBuildDebugCustom {
doLast {
//task action
}
}
Run Code Online (Sandbox Code Playgroud)
通过gradle添加任务时动态设置依赖关系
tasks.whenTaskAdded { task ->
if (task.name == 'generateDebugCustomBuildTypeBuildConfig') {
task.dependsOn doSomethingOnWhenBuildDebugCustom
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们使用"generateBuildConfig"任务,但您可以使用任何适合您的任务(另请参阅官方文档)
不要忘记使用buildTypeSpecific任务(generateBuildConfigvs. generateDebugCustomBuildTypeBuildConfig)
就是这样.遗憾的是,这种解决方法没有很好地记录,因为对我而言,这似乎是构建脚本最简单的要求之一.
我这样做了:
android {
ext.addDependency = {
task, flavor, dependency ->
def taskName = task.name.toLowerCase(Locale.US)
if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) {
task.dependsOn dependency
}
}
productFlavors {
production {
}
other
}
task theProductionTask << {
println('only in production')
}
tasks.withType(JavaCompile) {
compileTask -> addDependency compileTask, "production", theProductionTask
}
}
Run Code Online (Sandbox Code Playgroud)
坦率地说,我没有使用哪个语言环境来生成编译目标的名称,因此toLowerCase(Locale.US)可能适得其反.
| 归档时间: |
|
| 查看次数: |
19753 次 |
| 最近记录: |