我正在尝试修改我的 gradle 文件以允许我的应用程序基于Flavor
和使用不同的名称Build Type
。到目前为止,我已经成功地通过Android Gradle Plugin Docs使用技术进行Flavor
基于命名的简洁明了Manifest Merging
当前的
这些是我的主屏幕上我的debug
和release
构建的应用程序的名称。
Flavor Debug App Name Release App Name
-------- -------------- ----------------
entity_1 App Name App Name
entity_2 App Name App Name
... ... ...
entity_2 App Name App Name
hub Hub Hub
它很近,但是...
期望的
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
我想要这个,所以我知道debug
在我的主屏幕上哪种口味。我不关心区分release
口味,因为用户在他们的设备上只会有一种(可能有不止一种,但我不关心)
鉴于 Gradle 的可扩展性,我认为这是可能的;但是,我不是高级 Gradle 用户。
那么,我怎样才能简洁地(尽可能)扩展我的代码以获得我想要的输出?
注意:以上表格versionNameSuffix
用作我的应用名称的后缀;但是,它可以是任何东西(另一个添加的变量??),它可以让我知道我只在我的调试构建类型中使用了哪种风格。
非目标
对Android/Gradle
String Resource
的答案中的解决方案不感兴趣: App name based on build type *and* product flavor 。首选纯基于 Gradle 的解决方案。Manifest Merger
对放弃我目前实施的方法不感兴趣。https://stackoverflow.com/a/28465883/2333021的答案是实现我已经完成的工作的另一种方式,并且不允许我只在调试版本上执行此操作(我可以看到。如果确实如此,然后让我知道)。
代码
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "..."
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
manifestPlaceholders = [ applicationLabel:"App Name"]
}
productFlavors {
entity_1 {
versionNameSuffix ' - Entity_1_name'
applicationIdSuffix 'entity_1'
}
entity_2 {
versionNameSuffix ' - Entity_2_name'
applicationIdSuffix 'entity_2'
}
hub {
versionNameSuffix ' - Hub'
applicationIdSuffix 'hub'
manifestPlaceholders = [ applicationLabel:"Hub" ]
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
显现
<manifest ...>
<application
...
android:label="${applicationLabel}"
... >
更新
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
ext {
APP_NAME = "App Name"
HUB_NAME = "Hub"
}
defaultConfig {
applicationId "..."
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
productFlavors {
one_million {
versionNameSuffix ' - Entity_1'
applicationIdSuffix 'entity_1'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
udacity {
versionNameSuffix ' - Entity_2'
applicationIdSuffix 'entity_2'
manifestPlaceholders = [ applicationLabel: APP_NAME + versionNameSuffix ]
}
hub {
versionNameSuffix ' - Hub'
applicationIdSuffix 'hub'
manifestPlaceholders = [ applicationLabel: HUB_NAME ]
}
}
buildTypes {
release {
manifestPlaceholders = [ applicationLabel: APP_NAME ]
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
新输出
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 App Name <- Issue (Release)