単一のプロダクトのビルド環境をdev,stg,prd等で分ける構成の場合は、特に何も考えなくてもbuild.gradle
にproductFlavors
を設定するだけでできるのですが、複数のプロダクトを扱う場合にはproductFlavors
の設定だけだとソースコードやリソースの重複が起こる場合があります。
例えば以下の様な構成
フレーバー名 | ソースコード | リソース |
---|---|---|
google_dev | A | X1 |
google_stg | A | X2 |
google_prd | A | X3 |
amazon_dev | B | Y1 |
amazon_stg | B | Y2 |
amazon_prd | B | Y3 |
各フレーバー毎の差分(一例)
- A
- google play service依存のソースコード, etc...
- B
- amazonのsdk依存のソースコード, etc...
- X1-X3
- google playストア用のメッセージ, etc...
- Y1-Y3
- kindleストア用のメッセージ, etc...
- コピペ面倒
- ヒューマンエラー
- google_* フレーバー間で共通なソースコードを1箇所にまとめる
- amazon_* 〃
こうなる
問題点
やりたいこと
やること
build.gradle
productFlavors {
google_prd {
// ...
}
google_stg {
// ...
}
google_dev {
// ...
}
amazon_prd {
// ...
}
amazon_stg {
// ...
}
amazon_dev {
// ...
}
}
sourceSets {
// google_mainディレクトリを作成、google_* フレーバー共通で使用するソースを配置
google_dev.java.srcDirs = ['src/google_main/java']
google_stg.java.srcDirs = ['src/google_main/java']
google_prd.java.srcDirs = ['src/google_main/java']
// 同上
amazon_dev.java.srcDirs = ['src/amazon_main/java']
amazon_stg.java.srcDirs = ['src/amazon_main/java']
amazon_prd.java.srcDirs = ['src/amazon_main/java']
}