最近,我想出了如何使用占位符进行 Manifest Mergers。我在我的应用程序中实现了它,在大多数情况下,我对结果感到非常满意 -仅 Gradle 解决方案,用于根据 Build Variant 修改应用程序名称
以前,您必须String Resource
只使用一个字符串创建一个新的稀疏字符串,该字符串具有您想要在不同资源(例如风味和构建类型)上更改的属性。就个人而言,我不认为这种方法真的很干净。简单易行,是的,但不干净。
从那我创建了以下工作。但是,我不喜欢重复的代码,我Flavor
的每个人都会有重复的代码。这是可以抽象出来的东西吗?可能可以把它放在defaultConfig
?
例如,在下面的代码中,是否有某种方法可以移动manifestPlaceholders
每个 Flavor 中存在的代码,并将其抽象为defaultConfig
某种方式,以便我可以定义一次?
android {
...
ext {
APP_NAME = "App Name"
HUB_NAME = "Hub"
}
defaultConfig {
...
}
productFlavors {
entity_1 {
versionNameSuffix ' - Entity_1'
applicationIdSuffix 'entity_1'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
entity_2 {
versionNameSuffix ' - Entity_2'
applicationIdSuffix 'entity_2'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
...
entity_n {
versionNameSuffix ' - Entity_n'
applicationIdSuffix 'entity_n'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
hub {
versionNameSuffix ' - Hub'
applicationIdSuffix 'hub'
manifestPlaceholders = [ applicationLabel: HUB_NAME ]
}
}
buildTypes {
release {
...
}
}
applicationVariants.all { variant ->
if (variant.buildType.name != "release") return
if (variant.flavorName != "hub") {
variant.mergedFlavor.manifestPlaceholders = [applicationLabel: APP_NAME]
}
}
顺便说一句,上面的代码会给我applicationLabel
以下内容。我使用这些来确定主屏幕上应用程序的名称。
期望的
Flavor Debug App Name Release App Name
-------- -------------- ----------------
entity_1 App Name - Entity_1_name App Name
entity_2 App Name - Entity_2_name App Name
... ... ...
entity_n App Name - Entity_n_name App Name
hub Hub Hub