[英]Groovy/build.gradle: Get if Debug or Release
我正在寻找一种简单的方法来确定是否正在为我的库的build.gradle
脚本(在任务中)中的调试或发布模式构建 Android 应用程序。
我有一个名为prepareHermes
的任务,它提取 a.aar 文件。 我目前总是提取调试变体,但在发布版本中我想使用发布变体:
task prepareHermes() {
doLast {
def IS_DEBUG = // TODO: here
def aarName = IS_DEBUG ? "hermes-debug.aar" : "hermes-release.aar"
def hermesAAR = file("$hermesPackagePath/android/${aarName}")
if (!hermesAAR.exists()) {
throw new GradleScriptException("The hermes-engine npm package is missing \"android/${aarName}\"", null)
}
def soFiles = zipTree(hermesAAR).matching({ it.include "**/*.so" })
copy {
from soFiles
from "$reactNative/ReactAndroid/src/main/jni/first-party/hermes/Android.mk"
into "$thirdPartyNdkDir/hermes"
}
}
}
这个任务后来在不同的地方使用(见完整代码在这里),所以制作两个单独的任务( prepareHermesDebug
和prepareHermesRelease
)有点不方便,因为我有大量的重复代码。 (此任务是其他一些任务的依赖项,如完整代码所示。)
一种方法是检查是否有任何已执行的任务在其名称中具有预期的构建类型:
gradle.startParameter.taskRequests.toString().contains('Debug')
您还可以根据需要生成任意数量的任务:
[ 'debug', 'release' ].each{ name ->
task "prepareHermes-$name"{
doLast {
def aarName = "hermes-${name}.aar"
def hermesAAR = file "$hermesPackagePath/android/$aarName"
// the rest...
}
}
}
然后如果你运行gradlew tasks
,你会在 output 中看到prepareHermes-debug
和prepareHermes-release
使用gradle.startParameter.taskRequests
来确定当前变体不是一个好主意。**
gradle.startParameter.taskRequests
API是Under layer,它不是Variant Aware。它不支持以下场景:
./gradlew clean assemble
上面的命令生成Debug
和Release
工件,它们使用taskRequests
破坏检查脚本。
制作两个单独的任务(prepareHermesDebug 和 prepareHermesRelease)有点不方便......
是的,我们将采用onVariants{}
API 来做类似的事情。 基本上,它会迭代所有变体对象,以便您有机会分别注册 Variant Aware 任务:
androidComponents {
onVariants { variant ->
project.tasks.register<AarUploadTask>("${variant.name}AarUpload") {
aar.set(variant.artifacts.get(SingleArtifact.AAR))
}
}
}
abstract class AarUploadTask: DefaultTask() {
@get:InputFile
abstract val aar: RegularFileProperty
@TaskAction
fun taskAction() {
println("Uploading ${aar.get().asFile.absolutePath} to fantasy server...")
}
}
通过上面新的 Variant&Artifact APIs(在 Kotlin DSL 抱歉,但你可以轻松地将其转换为 groovy),您可以获取 Variant 对应的.aar
并方便地将其传递给自定义任务(不再使用硬编码)。
检查来自android/gradle-receipt 的完整脚本,以及来自Extend the Android Gradle 插件的更多 API 文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.