Edited at

AndroidStudio1.3でproductFlavor (外部参照jarまで差し替えるよ)

More than 3 years have passed since last update.

producflavorsでググると割と古い情報(0.xx時代とか)ばかりなので、最新版でまとめておきます。


1 前提条件

AndroidStudio1.3を使用


2 最終目標

ProductFlavorsとBuildTypeを使い、BuildVariantsを使いこなす。

proguardは適用。

外部参照jarもflavor毎に切り替える。


3 BuildType

デフォルトで用意されているdebugとreleaseを使う。


(1) release用設定

・releaseはproguard適用のため、ProjectStructure-BuildTypes-releaseで「minifyEnabled」をtrueにする。

・ビルドと同時に署名済みapkを生成したい場合は、ProjectStructure-Signingで必要な指定を行い、その設定名をProjectStructure-BuildTypes-releaseの「Signing Config」に指定しておく。

※パスワードなどがbuild.gradleにべた書きになるので注意。


(2) debug用設定

debugは別パッケージでインストールしたいので、ProjectStructure-BuildTypes-debugで「Application Id Suffix」に".debug"など任意のsuffixを指定する。

※AndroidAnnotations(3.2.2)を使うと、この指定だけでなぜかgradleがエラーになるので使用を諦めました。回避方法ご存じでしたらどなたか教えて下さい!!


4 Flavors


(1) develop用設定

・ProjectStructure-Flavorsで「+」を押して追加し、Nameに「develop」(任意の名前)をセットする。

分かり易くするため、versionNameに「n.m.dev」と設定する(n,mは任意の数字)


(2) staging用設定

・ProjectStructure-Flavorsで「+」を押して追加し、Nameに「staging」(任意の名前)をセットする。

分かり易くするため、versionNameに「n.m.staging」と設定する(n,mは任意の数字)


5 フォルダ構成


(1) javaソースとリソース関連を配置

app/src下に、以下のようにフォルダを配置する

app

+ main
+ java
+ res
+ assets
+ debug
+ java
+ res
+ assets
+ release
+ java
+ res
+ assets
+ develop
+ java
+ res
+ assets
+ staging
+ java
+ res
+ assets

resやassets下のファイルは、マージされ、main以外にもあれば上書きされます。

javaソースコードだけは、mainと各Flavorに同じクラスがあってはいけません。

また、BuildType別に置いたクラスは、各Flavorに同じクラスがあってはいけません。

例>debug/releaseに、ログ出力有/無しのLog.javaを置いた場合、developやstagingにLog.javaがあってはいけません。


(2) 外部参照jarを配置

app/libs下に、以下のようにフォルダを配置する。

staging時のみ、あるjarファイルを使いたい場合、以下のように置く。

app

+ libs
+ staging
+ stagingLib.jar

他にも、例えば、debugは検証用ライブラリ、releaseは商用ライブラリ、といった指定のあるSDKなども、この方法で切り替えられます。


6 Dependenciesの設定

appのbuild.gradleに以下の設定を記述する。

これは、stagingFlavorのときのみ、libs/staging下のjarファイルを参照する場合の記述。


build.gradle(app)

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])
stagingCompile fileTree(dir: 'libs/staging', include: ['*.jar'])
}


7 確認


(1) すべてを一度ビルドする。

projectDir $ ./gradlew assemble

app/build/outputs/apk下に、以下のようにapkがいろいろ出来ているはず。

app-develop-debug.apk

app-develop-release.apk
app-staging-debug.apk
app-staging-release.apk

※xxx-unaligned.apkは無視


(2) libsの確認

proguardがかかると、使っていないコードは当然削除されるので、ライブラリを使用するコードを記述した上で、リリースビルドする。

app/build/outputs/mapping/develop/release/mapping.txt

app/build/outputs/mapping/staging/release/mapping.txt

上記でstagingLib.jarのパッケージ名などを検索してみる。

developでは見つからず、stagingでは見つかるはず。