今まで、広告版と有料版を別のプロジェクトにして、両方に同じ内容の修正を行っていたが、コードを共通化できると手間が省ける。
Android Studioのビルドバリアント機能を使えば、一つのプロジェクトにできることが分かった。
ビルドバリアントには、「Build Types」や「Product Flavors」など何種類かあるが、広告版と有料版を一つのプロジェクトにするには、「Product Flavors」を使う。
「Product Flavors」の定義は以下のようにして行える。
build.gradleの設定
Moduleのbuild.gradleのandroidのブロックに以下のようにproductFlavorsを定義する。
apply plugin: 'com.android.application' android { ... productFlavors { Ad { buildConfigField "boolean", "NOAD", "false" } NoAd { applicationId "com.example.buildvariantstestNoAd" buildConfigField "boolean", "NOAD", "true" } } }
「Ad」、「NoAd」は、それぞれ広告版と有料版につけたFlavorの名前で任意の名前にできる。
applicationIdは重複することができないため、デフォルトのapplicationIdを使用しない方には、applicationIdの定義を追加する。
また、buildConfigFieldを定義することで、コード内で値を参照できるようになる。
レイアウトを別にする
広告版と有料版でレイアウトを分ける場合は、Android StudioでAndroidビューにして、appを右クリックして、「New Resource File」をクリックする。
名前に、デフォルトのレイアウトのファイル名と同じ名前を入力する。
Resource Typeを「layout」にする。
Source setをレイアウトを別にするFlavorの名前に設定する。
Android StudioのAndroidビューに2つのバージョンのレイアウトファイルが表示されるようになる。
コード内で処理を分ける
コード内で処理を分けるには、build.gradleでbuildConfigFieldを定義する。
以下のようにコード内からbuildConfigFieldで定義した値を参照できる。
String msg = "Hello World!"; if (BuildConfig.NOAD) { msg = "Hello NoAd!"; }
それぞれのバージョンをテストする
それぞれのバージョンをテストするには、Android Studioの左側のバーからBuildVariantsを選択し、Build Varirantの選択を切り替える。