概要
productFlavors に resConfigs を設定すると、 defaultConfig に設定されている項目を上書きするのではなく、追加される。
resConfigs とは?
Android アプリの build.gradle ファイルにアプリで使用する言語リソースを記述する項目です。
https://developer.android.com/studio/build/shrink-code.html?hl=ja#unused-alt-resources
recConfig を適切に設定することで、apk ファイルサイズを削減することができます。
https://qiita.com/tatsuhama/items/814471b79c5d572f77e9
例
android {
defaultConfig {
...
resConfigs "en", "ja" // 英語と日本語のみ対応
}
}
productFlavors とは?
デモ版/本番版、有償版/無償版 など、アプリのビルド方法を定義することができます
https://developer.android.com/studio/build/build-variants.html#product-flavors
例)
productFlavors {
japan {
// 国内向けビルド
applicationIdSuffix ".japan"
}
global {
// 海外向けビルド
applicationIdSuffix ".global"
}
}
productFlavors に resConfigs を設定する
こんな風に設定できます。
productFlavors {
japan {
// 国内向けビルド
applicationIdSuffix ".japan"
}
global {
// 海外向けビルド
applicationIdSuffix ".global"
resConfigs "en" // 英語リソースだけ含めたい
}
}
ハマった点
やりたいこと
- 国内向けアプリ:英語と日本語以外のみ対応(他の言語リソースは削除したい)
- 海外向けアプリ:英語のみ対応(日本語リソースも削除したい)
記述
android {
defaultConfig {
...
resConfigs "en", "ja" // 英語と日本語以外のリソースは削除
}
productFlavors {
japan {
// 国内向けビルド
applicationIdSuffix ".japan"
}
global {
// 海外向けビルド
applicationIdSuffix ".global"
resConfigs "en" // 英語リソースだけ含めたい
}
}
}
問題
global の Flavor に日本語リソースも含まれている。。。
apk Analyzer で開いた結果
原因
resConfigs
に設定した項目は上書きではなく追加される
原因詳細
recConfigs
上で command
キー(※Mac の場合)を押下しながらクリック
BaseFlavor.class
が開くので、コードを見てみる
確かに、 add
になってますね。
デフォルトで、 ["en" , "ja"]
が設定されているので、 "en"
を add して ["en" , "ja"]
なんですね。。。
※ set じゃない。
ちなみに、 applicationIdSuffix
は add ではなく set です。
対応
特定のフレーバーで defaultConfig
に設定されている内容から言語を削減したい場合、 defaultConfig
の resConfigs
を記述しない。
(ただ、productFlavors の数が多いと、全てに記述しないといけないのは面倒…)
記述
android {
defaultConfig {
...
// ↓ ** globalフレーバーで日本語も含まれるので記述しない **
// resConfigs "en", "ja" // 英語と日本語以外のリソースは削除
// ↑ ** globalフレーバーで日本語も含まれるので記述しない **
}
productFlavors {
japan {
// 国内向けビルド
applicationIdSuffix ".japan"
resConfigs "en", "ja" // 英語と日本語以外のリソースは削除
}
global {
// 海外向けビルド
applicationIdSuffix ".global"
resConfigs "en" // 英語リソースだけ含めたい
}
}
}
まとめ
productFlavors に resConfigs を設定すると、 defaultConfig に設定されている項目を上書きするのではなく、追加される。