[Android][Kotlin]Androidの設定値について
指定したターゲット(パッケージ名や利用するサービスの設定)でAndroidアプリケーションをビルドする方法は複数ある。初期のものであったり、それを改善したものであったり。最新の方法だと利点が多いので選択できればいいのだが、歴史が長いソースコードだと、様々な理由から方法を変更できなかったり。
何がベストなのかは状況によって異なるが、まずは知らないことには話にならないということで調べてた方法を列挙してみる。
androidコマンド
最新のAndroid SDKのツールではなくなったコマンド。オプションで指定したAndroidアプリケーションの雛形となるソース一式を生成されるので、例えば、異なるパッケージ名のソースを生成する場合に使っていた。
$ android create project \
--name プロジェクト名 \
--target ターゲットID \
--path プロジェクトを生成するファイル・パス \
--package パッケージ名 \
--activity デフォルト・アクティビティ名
代替リソース
条件毎に用意したディレクトリにリソースを置いて切り替える方法。
以下は高密度画面(hdpi)とそれ以外の画面の端末でアイコン画像を切り替える例だ。
res/drawable/icon.png
res/drawable-hdpi/icon.png
hdpiは設定修飾子と呼ばれる識別子だが、どんな設定修飾子があるのか表にしてみる。
ローカライズ
設定修飾子を使った代替リソースを利用する方法。例を挙げる。
res/values/strings.xml
res/drawable/
res/values-en/strings.xml
res/values-ja/strings.xml
res/drawable-ja/
文字列リソースを英語と日本語で切り替えるのと、画像を日本語とそれ以外で切り替える例となっている。
ビルド バリアント
ビルド・バリアントは、ビルドタイプとプロダクト フレーバーを組み合わせたも。build.gradleの例だ。
android {
defaultConfig {
}
signingConfigs {
release {}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
debug {}
staging {}
}
flavorDimensions "api", "mode"
productFlavors {
demo {
dimension "mode"
}
full {
dimension "mode"
}
minApi24 {
dimension "api"
}
minApi23 {
dimension "api"
}
minApi21s {
dimension "api"
}
}
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("minApi21") && names.contains("demo")) {
setIgnore(true)
}
}
}
ビルド バリアントの形式は、<product-flavor><Build-Type>となる。
例えば、minApi24DemoDebugは、minApi24とdemoとdebugの組み合わせという意味。この場合、apkはapp-minApi24-demo-debug.apkとなる。
ビルド・バリアントに対応したJavaソースのパスは、例えば src/demoMinApi24/java/ となる。
ソースセットの優先順位の例だ。
src/demoDebug/
src/debug/
src/demo/
src/main/
gradle.properties
build.gradleに渡すパラメータを設定できる。
gradle.propertiesの例。
DEMO_STRING="demo string"
DEMO_NUM_DEMO=1234
DEMO_NUM_FULL=5678
DEMO_BOOLEAN=true
build.gradleの例。
android {
defaultConfig {
// resの値を追加(AndroidManifest.xml で参照)
resValue 'string', 'DEMO_STRING', "${DEMO_STRING}"
// BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
buildConfigField 'boolean', 'DEMO_BOOLEAN', "${DEMO_BOOLEAN}"
}
productFlavors {
demo {
// BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
buildConfigField 'long', 'DEMO_NUM', "${DEMO_NUM_DEMO}"
}
full {
// BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
buildConfigField 'long', 'DEMO_NUM', "${DEMO_NUM_FULL}"
}
}
リソースの値を設定することでAndroidManifest.xmlで使い値を切り替えたり、BuildConfigクラスのメンバーを設定することで、ソースコードで参照する値を切り替えられる。
【関連情報】
- 集まれKotlin好き!Kotlin愛好会 vol.20
- Cocoa.swift
- Cocoa勉強会 関東
- Cocoa練習帳