gpt4 book ai didi

android - Gradle构建类型相互覆盖

转载 作者:行者123 更新时间:2023-12-03 05:08:09 24 4
gpt4 key购买 nike

我想根据选择的buildType为属性设置不同的值。但是通过检查gradle控制台,我意识到在配置阶段所有3个buildTypes都已执行,并且最后一个build的值保留在该属性中。我认为这不是应该的工作方式。
我做错什么了吗?

android {
signingConfigs {
...
}
compileSdkVersion 28
defaultConfig {
...
}

productFlavors {
normal {
manifestPlaceholders = [appName: "@string/app_name"]
signingConfig signingConfigs.configNormalRelease
}
}
buildTypes {
release {
println("app release build")
rootProject.ext.test = false
}
debug {
println("app debug build")
rootProject.ext.test = false
}
staging {
println("app staging build")
rootProject.ext.test = true
}
}
sourceSets {
main {
aidl.srcDirs = ['src/main/aidl']
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
checkReleaseBuilds true
abortOnError false
}
flavorDimensions 'tier'
productFlavors {
normal {
dimension "tier"
}
}
}

输出为
app release build
app debug build
app staging build

无论我是否调用assembleRelease,assembleDebug,assembleStaging,“test”属性的值始终为true

为什么我到处都看到人们在被最后一个重写时将api键,URL和其他自定义内容放到buildType中?我知道gradle可能会在配置阶段调用所有buildtype,但是上面提到的值在哪里呢?

最佳答案

如果要从项目中的源代码获取test值,则可以设置变量:

buildTypes {
release {
buildConfigField 'boolean', 'test', 'false'
}
debug {
buildConfigField 'boolean', 'test', 'false'
}
staging {
buildConfigField 'boolean', 'test', 'true'
}
}

然后,您可以使用 BuildConfig类从代码中获取此字段( test字段将生成为 BuildConfig)。通过 BuildConfig.test获取它。

而且,如果您确实想更改任何buildType的gradle变量,则可以尝试执行以下操作:
android.applicationVariants.all { variant ->
boolean isStaging = gradle.startParameter.taskNames.find {it.contains("staging") || it.contains("Staging")} != null
if (isStaging) {
rootProject.ext.test = true
} else {
rootProject.ext.test = false
}
}

关于android - Gradle构建类型相互覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53627975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com