Androidで複数Product Flavorを利用する
ゴール
複数のビルド生成ファイルを作成(端末インストール)する。
上記を実現する際に問題が生じることがある。
問題
ビルド時のアウトプットファイル(.apk)の名前が重複してしまい
複数アプリを同時にインストールできなくなってしまうことがある。
根本的な原因は以下。
applicationIdが同一
Content Providerのauthoritiesが同一
解決方法
1. applicationId
build.gradleファイル内のapplicationIdを別々にしたら解決。
free { applicationId "com.bison.sampleapp.free" } paid { applicationId "com.bison.sampleapp.paid" }
ただ、Flavorをわけているので、applicationId変更しないことはないかな笑
問題はBuild Typeをrelease, debugに置き換える際に発生します。
Build TypeのプロパティにapplicationIdSuffixがあるので、それ使いましょう。
buildTypes{ release{ } debug{ applicationIdSuffix ".debug" } }
これでdebugビルド後のみ生成ファイルが
applicationId + applicationIdSuffix
になるのでコンフリクトが起きなくなります。
2. Content Provider
Content Providerを利用する場合、同じように異なるFlavorでビルドを行った際にエラーが生じます。
<provider android:name=".SampleContentProvider" android:authorities="com.bison.sampleapp.provider" android:exported="false" />
AndroidManifest.xml内のauthoritiesにユニークな識別子を与える必要あり。
そのためには、authoritiesを動的に変更できるようにします。
authoritiesはアプリのパッケージ名に揃えるのが通例です。
<provider android:name=".SampleContentProvider" android:authorities="${applicationId}.provider" android:exported="false" />
applicationIdはbuild.gradleから動的に自動で割り当てられる変数です。 (もしくは、build.gradle内でManifestHolderを利用してください。)
以上。
Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築
- 作者: 綿引琢磨,須江信洋,林政利,今井勝信
- 出版社/メーカー: 翔泳社
- 発売日: 2014/11/07
- メディア: Kindle版
- この商品を含むブログ (2件) を見る