5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Android]Build Variant(ビルドバリアント)のあれこれ

Last updated at Posted at 2024-05-09

今までビルドバリアントについて知らなかったので色々調べたまとめ。
個人的備忘録として記事にします。
この記事はGroovyではなくKotlinでの設定方法を書く。

ビルドバリアントって?

ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが限定された無料版と、より多くのコンテンツを含む有料版の両方を作成できます。API レベルまたは他のデバイスのバリエーションに基づいて、異なるデバイスをターゲットとするアプリの異なるバージョンをビルドすることもできます。

とあるように、これを設定しておくと1つのアプリで複数のバージョンを作ることができる。

AndroidStudioでは以下の場所で現在のビルドバリアントを確認できる

  • 現在のビルドバリアントの確認。この画像だとdebugが選択されている
  • ビルドバリアントの設定が見つからない場合、左の・・・から出現する一覧で選択すると、上の画像通りになる
  • デフォルトでは2種類のビルドバリアントがある。
    image.png

ビルドバリアントは

プロダクト フレーバーとビルドタイプの、異なる組み合わせの結果です。プロダクト フレーバーはユーザー向けの属性であり、ビルドタイプはデベロッパー向けの属性であると考えることができます。実際はビルド バリアントは直接設定するわけではなく、プロダクト フレーバーのセットとビルドタイプのセットを設定し、それによってビルド バリアントを決定します。

とあるようにこの記事ではビルドタイプとプロダクトフレーバーの設定とかについて書く。

ビルドタイプの設定

build.gradle.ktsandroidブロックにbuildtypeを設定できる。

android {
    defaultConfig {
        ...
    }
    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
+       create("demo") {
+           isMinifyEnabled = false
+     }
    }
}

デフォルトでreleaseは設定されており、ここには書かれていないがdebugも設定されている。
create()で新しく作成することができる。buildTypesでのプロパティはまだ
詳しくないためリファレンスを見て欲しい。
この状態でビルドバリアントを見ると画像のように増えていることが確認できる。
BuildVariant5.png

プロダクトフレーバーの設定

buildtypeと同じようにbuild.gradle.ktsandroidブロックに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"
        }
    }
}

設定後ビルドバリアントを見ると増えていることが確認できる。
BuildVariant4.png

ビルドバリアントはproductFlavorとbuildtypeのすべての組み合わせを表し、それに応じて<product-flavor><build-type>という名前が付く。
applicationIdSuffixを設定すると、アプリIDの後ろに設定した文字列を付与できる。
versionNameSuffixを設定すると、バージョン名の後ろに設定した文字列を付与できる。

ここでそれぞれsushidebugとyakinikudebugを選択してビルドすると、実機もしくはエミュレータ上でアプリIDとバージョン名に付与されていることが確認できる。

画像(今回は実機)を見ると最下部のバージョン名とアプリIDに設定した文字列が付与されているのを確認できる。

アプリ名とアイコンの変更

このままだと同一端末内に同じ見た目、名前のアプリが存在してしまい、一目では分からない。
そのため選択したビルドバリアントによってアイコンと名前を設定することができる。

ディレクトリの追加

まずはsushiとyakiniku用のディレクトリを作成する。

  1. 左上のAndroidタブをクリックして一覧の中からProjectを選択
    image.png

  2. MyProject/app/src/(今回の場合だとBuidVariantTest/app/src/)を右クリックして、[New] > [Directory]を選択
    image.png

3. 表示された一覧から追加したいディレクトリを選択(今回の場合はsushi/resyakiniku/res)

注意
ディレクトリを追加する際、ビルドバリアントで追加したいものを選択していないと一覧に表示されない
(sushi/resを追加したいならsushidebug、yakinikuならyakinikudebugとか)

ディレクトリの追加ができたらそれぞれyakiniku用、sushi用のアイコンを作成する。

  1. image Assetsを選択
    image.png

  2. アイコンの作成
    imageasset2.png

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やチュートリアルを見ればこの記事を読まなくてもできると思うが、サイトを往復するのが手間だったので、自分用にまとめた。

参考

ビルド バリアントを設定する
ビルド バリアントを使用してさまざまなバージョンのアプリを作成する

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?