Help us understand the problem. What is going on with this article?

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

More than 5 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では見つかるはず。

le_skamba
Android/iPhoneアプリ開発者。その前はゲームプログラマをしてました。Windowsアプリも幾つか作りました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away