Android 应用风格名称作为变量而不是静态字符串
Android app flavor name as a variable instead of static string
在过去的一个小时里,我一直在尝试在 gradle.properties 中设置一些变量名称,例如 FLAVOR_NAME,然后在 build.gradle 中使用它来获得一种动态风味名称。还没有成功。甚至可以有一个动态的风味名称吗?我的意思是:
$FLAVOR_NAME{
versionName FLAVOR_VERSION
versionCode FLAVOR_CODE
}
@Eloy_007,
虽然您的问题与 this one 相似,但您的问题中有一些细微差别,我认为以下内容会给出答案。
首先,有一个 great article that you should read where the author(Coby Plain) goes about providing a better framework for working with flavors. Also, the android10/Android-CleanArchitecture repo 具有用于导入 gradle 属性的非常好的结构。在 buildsystem/dependencies.gradle
和 presentation/build.gradle
中寻找指导。
也就是说,这里有一个快速示例,说明在使用 semi-dynamic/imported 风格时导入属性的样子:
在 gradle 文件中,我们可以引用一个外部文件,该文件定义了我们所有的相关属性,并且可以使用一些简单的 groovy 魔术来连接字符串等
build.gradle:
apply from: "properties.gradle" // load in properties from some other file
// ... plugins, etc.
android {
// some other sections
productFlavors {
dev {
// you may want to keep some non-imported flavors.
// maybe you're working with flavor dimension here
}
// ... maybe more standard flavors
flavors.each {name, flavor ->
def wrapEscaped = { s -> "\"${s}\""} // simple function to wrap strings
"$name" {
applicationId flavor.applicationId
versionName "${some_version_number}"
buildConfigField "String", "MAJOR_KEY", wrapEscaped(flavor.majorKey)
buildConfigField "String", "ANOTHER_ONE", wrapEscaped(flavor.anotherOne)
buildConfigField "int", "PILLOW_COUNT", flavor.pillowCount
// ... additional configs
}
}
}
}
然后在引用的 properties.gradle
中定义 flavors
如下:
ext {
config = [
baseId : "io.wethebest.mobile"
]
flavors = [
free : [
applicationId: config.baseId + ".free",
majorKey : "COCOA BUTTER",
anotherOne : "ANOTHER ONE",
pillowCount : 1,
]
simple : [
applicationId: config.baseId + ".simple",
majorKey : "A HAMMOCK",
anotherOne : "ANOTHER ONE",
pillowCount : 10,
],
paid : [
applicationId: config.baseId,
majorKey : "A JETSKI",
anotherOne : "ANOTHER ONE",
pillowCount : 100000000,
]
]
}
至少,这允许您在 build.gradle
文件的 外部 定义您的风格,这样您就可以最大限度地减少必须筛选的垃圾数量。另外,主要的关键是,它使 build.gradle
文件的修订历史保持干净。
HTH,祝你好运!
在过去的一个小时里,我一直在尝试在 gradle.properties 中设置一些变量名称,例如 FLAVOR_NAME,然后在 build.gradle 中使用它来获得一种动态风味名称。还没有成功。甚至可以有一个动态的风味名称吗?我的意思是:
$FLAVOR_NAME{
versionName FLAVOR_VERSION
versionCode FLAVOR_CODE
}
@Eloy_007,
虽然您的问题与 this one 相似,但您的问题中有一些细微差别,我认为以下内容会给出答案。
首先,有一个 great article that you should read where the author(Coby Plain) goes about providing a better framework for working with flavors. Also, the android10/Android-CleanArchitecture repo 具有用于导入 gradle 属性的非常好的结构。在 buildsystem/dependencies.gradle
和 presentation/build.gradle
中寻找指导。
也就是说,这里有一个快速示例,说明在使用 semi-dynamic/imported 风格时导入属性的样子:
在 gradle 文件中,我们可以引用一个外部文件,该文件定义了我们所有的相关属性,并且可以使用一些简单的 groovy 魔术来连接字符串等
build.gradle:
apply from: "properties.gradle" // load in properties from some other file
// ... plugins, etc.
android {
// some other sections
productFlavors {
dev {
// you may want to keep some non-imported flavors.
// maybe you're working with flavor dimension here
}
// ... maybe more standard flavors
flavors.each {name, flavor ->
def wrapEscaped = { s -> "\"${s}\""} // simple function to wrap strings
"$name" {
applicationId flavor.applicationId
versionName "${some_version_number}"
buildConfigField "String", "MAJOR_KEY", wrapEscaped(flavor.majorKey)
buildConfigField "String", "ANOTHER_ONE", wrapEscaped(flavor.anotherOne)
buildConfigField "int", "PILLOW_COUNT", flavor.pillowCount
// ... additional configs
}
}
}
}
然后在引用的 properties.gradle
中定义 flavors
如下:
ext {
config = [
baseId : "io.wethebest.mobile"
]
flavors = [
free : [
applicationId: config.baseId + ".free",
majorKey : "COCOA BUTTER",
anotherOne : "ANOTHER ONE",
pillowCount : 1,
]
simple : [
applicationId: config.baseId + ".simple",
majorKey : "A HAMMOCK",
anotherOne : "ANOTHER ONE",
pillowCount : 10,
],
paid : [
applicationId: config.baseId,
majorKey : "A JETSKI",
anotherOne : "ANOTHER ONE",
pillowCount : 100000000,
]
]
}
至少,这允许您在 build.gradle
文件的 外部 定义您的风格,这样您就可以最大限度地减少必须筛选的垃圾数量。另外,主要的关键是,它使 build.gradle
文件的修订历史保持干净。
HTH,祝你好运!