LoginSignup
17
16

More than 5 years have passed since last update.

少し複雑なProduct Flavorを設定する

Posted at

単一のプロダクトのビルド環境をdev,stg,prd等で分ける構成の場合は、特に何も考えなくてもbuild.gradleproductFlavorsを設定するだけでできるのですが、複数のプロダクトを扱う場合には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_prd_…_strings_xml_-__app__-_FlavorTest_-____IdeaProjects_FlavorTest_.png

問題点

  • コピペ面倒
  • ヒューマンエラー

やりたいこと

  • 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']
}

結果

foo.png

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16