Android Studioでアプリビルドするとき、
こういうケースを考えてみます。
- FREE版のアプリAPK / AABを作りたい
- PRO版のアプリAPK / AABを作りたい
- 全verを1つのプロジェクトで管理したい
例えばGooglePlayに広告ありのFREE版アプリと広告なしのPRO版アプリを同時にリリースしたい……そういう時にAPK/AABを1つのプロジェクト上で分岐させたいってことです。
そういう時に使えるのが次の機能
- Build Types
- Build Flavos
これら2つを合わせてBuild Variantsと言います。
その分岐方法とかを将来のために残しときます。
このページの目次
1.モジュールbuild.gradleにproductFlavorsを追加
まずモジュールレベルのbuild.gradleを開きます。
▼ Module:... の方のbuild.gradleを開く
▼ defaultConfigの設定箇所を見つける
1 2 3 4 5 6 7 |
defaultConfig { applicationId "com.hoge.example" minSdkVersion 21 targetSdkVersion 31 versionCode 1 versionName "1.0" } |
このdefaultConfigのあと(中じゃないよ)に productFlavors というブロックを追加します。そこでFREE版・PRO版とかの切り替えを定義できます。
▼ FREE/PROで分岐させるproductFlavors設定例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
flavorDimensions "default" productFlavors { free { dimension "default" applicationIdSuffix "" versionNameSuffix "" } pro { dimension "default" applicationIdSuffix ".pro" versionNameSuffix "-pro" } } |
ひとまず dimension "default" は共通にしておき、applicationSuffix・versionNameSuffixでプロ版のみに接頭語(.pro/-pro)を付与しています。
これでビルド時に分岐させれるってわけです。
2.モジュールbuild.gradleのbuildTypesを編集
あとデバッグ設定も追加します。
▼ BuildTypesブロックの箇所に注目
1 2 3 4 5 6 |
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } |
▼ ここにdebugブロックを追加する
1 2 3 4 5 6 7 8 9 10 11 12 |
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } /// 追加!! debug { applicationIdSuffix ".debug" debuggable true } } |
ということで初期設定はこれにて完了
3.アプリコード側でFREE/PRO版ごとに処理分岐とかする
ここまでだとBuild Flavorが追加されただけ
実際には以下のような切り替えが必要です。
- Flavorごとの動作コードの切替
- Flavorごとのリソースなどの切替
ここではコードをflavorで分岐させてみます。
▼ 例えばこんなコードを書いてみた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class MainActivity : AppCompatActivity() { companion object{ /// FREE版の時にtrueになる private const val IS_FREE_BUILD_VARIANT: Boolean = "free" == BuildConfig.FLAVOR /// PRO版の時にtrueになる private const val IS_PRO_BUILD_VARIANT: Boolean = "pro" == BuildConfig.FLAVOR } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if(IS_FREE_BUILD_VARIANT){ /// FREE版の初期化コード… }else if(IS_PRO_BUILD_VARIANT){ /// PRO版の初期化コード… } } } |
このように簡単にコード分岐が可能
Build Variantの関する情報は BuildConfig.FLAVOR から取得できます。返ってくる値はbuild.gradleのproductFlavorsで定義したフレーバー名です。
4.文字列リソースをflavorごとに切り替えする
通常、文字列リソースはstrings.xmlで定義します。
これをPRO版では一部だけ変更したいケースもあるはずです。
そういう時はそのflavor専用のリソース追加します。
まず左側のプロジェクトマネージャのAndroidを開き、
そこから 左クリック => Android Resource File をクリック。
▼ このようにPRO版用リソース追加
これは例なので各自の環境で置き換えること
上記では文字列リソースファイル名として env_string.xml という名前にし、Resources type : Values 、Source set : pro としてPROフレーバー用のリソースを追加しました。
▼ アプリ名だけPRO用に切り替える(env_strings.xml)
1 2 3 4 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">MyApp PRO</string> </resources> |
デフォルトだとアプリ名として app_name というIDが作られますが、もしflavorがそれを上書きしてるならそっちが優先されます。
同じ要領で文字列以外のリソースも分岐させれます。
5.Flavor・Build Typeごとにアプリをビルドする
どうやってFlavorをビルド分岐させるかですが…
次のような手順でBuild Variantsを表示します。
▼ View => Tool Windows => Build Variants
▼ Build Variantウインドウが表示される
ここからビルド対象のflavor/build typeを選んでください。
リリース時の署名のやり方などは全く変わりません。
プロジェクト内でBuild Variantを切り替えるだけです。
総括.ビルド分岐手順さえ分かれば簡単にできる
念のためにここまでの手順を箇条書きしときます。
- モジュールbuild.gradleにproductFlavorsを追加
- モジュールbuild.gradleのbuildTypesを編集
- コード側でFREE/PRO版ごとに処理分岐とかする
- 文字列リソースをflavorごとに切り替えする
- Flavor・Build Typeごとにアプリをビルドする
以上、Android Studioでのアプリビルド切替でした。
大まかな手順さえ知っておけば大丈夫です。