今までビルドバリアントについて知らなかったので色々調べたまとめ。
個人的備忘録として記事にします。
この記事はGroovyではなくKotlinでの設定方法を書く。
ビルドバリアントって?
ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが限定された無料版と、より多くのコンテンツを含む有料版の両方を作成できます。API レベルまたは他のデバイスのバリエーションに基づいて、異なるデバイスをターゲットとするアプリの異なるバージョンをビルドすることもできます。
とあるように、これを設定しておくと1つのアプリで複数のバージョンを作ることができる。
AndroidStudioでは以下の場所で現在のビルドバリアントを確認できる
- 現在のビルドバリアントの確認。この画像だとdebugが選択されている
- ビルドバリアントの設定が見つからない場合、左の・・・から出現する一覧で選択すると、上の画像通りになる
ビルドバリアントは
プロダクト フレーバーとビルドタイプの、異なる組み合わせの結果です。プロダクト フレーバーはユーザー向けの属性であり、ビルドタイプはデベロッパー向けの属性であると考えることができます。実際はビルド バリアントは直接設定するわけではなく、プロダクト フレーバーのセットとビルドタイプのセットを設定し、それによってビルド バリアントを決定します。
とあるようにこの記事ではビルドタイプとプロダクトフレーバーの設定とかについて書く。
ビルドタイプの設定
build.gradle.kts
のandroid
ブロックにbuildtypeを設定できる。
android {
defaultConfig {
...
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
+ create("demo") {
+ isMinifyEnabled = false
+ }
}
}
デフォルトでreleaseは設定されており、ここには書かれていないがdebugも設定されている。
create()
で新しく作成することができる。buildTypesでのプロパティはまだ
詳しくないためリファレンスを見て欲しい。
この状態でビルドバリアントを見ると画像のように増えていることが確認できる。
プロダクトフレーバーの設定
buildtypeと同じようにbuild.gradle.kts
のandroid
ブロックにproductFlavorを設定できる。
android {
...
defaultConfig {...}
buildTypes {
release {...}
create("demo") {...}
}
flavorDimensions += "hugahuga"
productFlavors {
create("sushi") {
dimension = "hugahuga"
applicationIdSuffix = ".sushi"
versionNameSuffix = "-sushi"
}
create("yakiniku") {
dimension = "hugahuga"
applicationIdSuffix = ".yakiniku"
versionNameSuffix = "-yakiniku"
}
}
}
ビルドバリアントはproductFlavorとbuildtypeのすべての組み合わせを表し、それに応じて<product-flavor><build-type>
という名前が付く。
applicationIdSuffix
を設定すると、アプリIDの後ろに設定した文字列を付与できる。
versionNameSuffix
を設定すると、バージョン名の後ろに設定した文字列を付与できる。
ここでそれぞれsushidebugとyakinikudebugを選択してビルドすると、実機もしくはエミュレータ上でアプリIDとバージョン名に付与されていることが確認できる。
画像(今回は実機)を見ると最下部のバージョン名とアプリIDに設定した文字列が付与されているのを確認できる。
アプリ名とアイコンの変更
このままだと同一端末内に同じ見た目、名前のアプリが存在してしまい、一目では分からない。
そのため選択したビルドバリアントによってアイコンと名前を設定することができる。
ディレクトリの追加
まずはsushiとyakiniku用のディレクトリを作成する。
3. 表示された一覧から追加したいディレクトリを選択(今回の場合はsushi/res
、yakiniku/res
)
注意
ディレクトリを追加する際、ビルドバリアントで追加したいものを選択していないと一覧に表示されない
(sushi/resを追加したいならsushidebug、yakinikuならyakinikudebugとか)
ディレクトリの追加ができたらそれぞれyakiniku用、sushi用のアイコンを作成する。
AndroidManifestの編集
AndroidManifestのアイコン、アプリ名を設定する場所(icon、label、roundIcon)を任意の変数名にする。
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="${app_icon}"
android:label="${app_name}"
android:roundIcon="${app_icon_round}"
android:supportsRtl="true"
android:theme="@style/Theme.BuildVariantTest"
tools:targetApi="31"
>
プロダクトフレーバーの編集
選んだビルドバリアントによってアイコンとアプリ名を変更するため、プロダクトフレーバーにプロパティを追加する。
android {
...
defaultConfig {...}
buildTypes {
release {...}
create("demo") {...}
}
flavorDimensions += "hugahuga"
productFlavors {
create("sushi") {
dimension = "hugahuga"
applicationIdSuffix = ".sushi"
versionNameSuffix = "-sushi"
+ manifestPlaceholders["app_name"] = "sushi"
+ manifestPlaceholders["app_icon"] = "@mipmap/ic_launcher"
+ manifestPlaceholders["app_icon_round"] = "@mipmap/ic_launcher_round"
}
create("yakiniku") {
dimension = "hugahuga"
applicationIdSuffix = ".yakiniku"
versionNameSuffix = "-yakiniku"
+ manifestPlaceholders["app_name"] = "yakiniku"
+ manifestPlaceholders["app_icon"] = "@mipmap/ic_launcher"
+ manifestPlaceholders["app_icon_round"] = "@mipmap/ic_launcher_round"
}
}
}
編集後それぞれのビルドバリアントでビルドすると画像のようにアイコンと名前の変わったアプリが出来上がる。
まとめ
これでビルドバリアントを使ってバージョンの違うアプリを扱える。
AndroidDeveloperやチュートリアルを見ればこの記事を読まなくてもできると思うが、サイトを往復するのが手間だったので、自分用にまとめた。