最近、プレースホルダーを使ってマニフェスト マージを行う方法を見つけました。アプリに実装しましたが、ほとんどの場合、結果に本当に満足しています-ビルドバリアントに基づいてアプリ名を変更するGradleのみのソリューション
String Resource
以前は、フレーバーやビルド タイプなどのさまざまなリソースで変更したい属性を持つ文字列を 1 つだけ使用して、新しいスパースを作成する必要がありました。個人的には、その方法は本当にきれいだとは思いません。シンプルで簡単ですが、きれいではありません。
そこから、動作する以下を作成しました。しかし、私は重複したコードが好きではありませんFlavor
。これは抽象化できるものですか?おそらくそれを入れることができdefaultConfig
ますか?
たとえば、以下のmanifestPlaceholders
コードでは、すべてのフレーバーに存在するコードを移動し、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