我正在尋找一種簡單的方法來確定在我的庫 build.gradle腳本中(在任務中)是否正在為除錯或發布模式構建 Android 應用程式。
我有一個名為prepareHermes提取 .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)有點不方便,因為我有大量重復的代碼。(此任務是其他一些任務的依賴項,如完整代碼所示。)
uj5u.com熱心網友回復:
您還可以根據需要生成任意數量的任務:
[ 'debug', 'release' ].each{ name ->
task "prepareHermes-$name"{
doLast {
def aarName = "hermes-${name}.aar"
def hermesAAR = file "$hermesPackagePath/android/$aarName"
// the rest...
}
}
}
然后,如果您運行gradlew tasks,您將在輸出中看到prepareHermes-debug和prepareHermes-release
uj5u.com熱心網友回復:
使用 gradle.startParameter.taskRequests來確定當前的變體是不是一個不錯的主意。**
- Android Gradle 插件 (AGP) 是基于 Gradle 平臺構建的。
- Android Variant 是上層的一個概念。
- Gradle
gradle.startParameter.taskRequestsAPI 位于底層,并且不支持 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 API(在 Kotlin DSL 中抱歉,但您可以輕松地將其轉換為 groovy),您可以獲得.aarVariant的對應并方便地將其傳遞給自定義任務(不再進行硬編碼)。
檢查來自android/gradle-receipt 的完整腳本,以及來自Extend the Android Gradle plugin 的更多 API 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402882.html
標籤:
