主な用途
android {
productFlavors {
aVersion {
applicationId "jp.co.sample.aVersion"
buildConfigField "String", "SERVER_URL", '"http://dummy"'
}
aVersionStaging {
applicationId "jp.co.sample.aVersion.staging"
buildConfigField "String", "SERVER_URL", '"http://dummy"'
}
aVersionDevelopment {
applicationId "jp.co.sample.aVersion.development"
buildConfigField "String", "SERVER_URL", '"http://dummy/"'
}
bVersion {
applicationId "jp.co.sample.bVersion"
buildConfigField "String", "SERVER_URL", '"http://dummy"'
}
bVersionStaging {
applicationId "jp.co.sample.bVersion.staging"
buildConfigField "String", "SERVER_URL", '"http://dummy"'
}
bVersionDevelopment {
applicationId "jp.co.sample.bVersion.development"
buildConfigField "String", "SERVER_URL", '"http://dummy/"'
}
}
}
問題点1
strings.xmlなどのリソースが各Flavor毎に分かれる。でも、リソースはすべての環境でほぼ同じなので、ほとんど同じリソースが沢山出来てしまう。
解決策
各環境のsourceSetを同じPathにする。サーバURLなど各環境毎に変更する値はbuildConfigFieldで定義する。
android {
...
sourceSets {
aVersionStaging.setRoot('src/aVersion')
aVersionDevelopment.setRoot('src/aVersion')
bVersionStaging.setRoot('src/bVersion')
bVersionDevelopment.setRoot('src/bVersion')
}
}
問題点2
不要なBuildVariantが出来てしまう。
例えば、aVersionDevelopmentReleaseなど。本番以外の環境ではDebugビルドだけでいい。
解決策
BuildVariantの一部をビルド対象外にする
android {
// ステージング環境・開発環境用モジュールはdebugビルドのみとする
variantFilter { variant ->
if (variant.buildType.name.equals('release')) {
if (variant.getFlavors().get(0).name.contains('Staging') || variant.getFlavors().get(0).name.contains('Development')) {
variant.setIgnore(true);
}
}
}
}
アプリアイコンにビルドしたブランチ名、コミットHash等を表示する。これによって、テスト対象のアプリが古かったということが少なくなる。
Gradle Pluginを使用する
プロジェクトトップのbuild.gradleに以下を追加
buildscript {
dependencies {
classpath 'com.github.splatte:gradle-android-appiconoverlay:1.1'
}
}
app/build.gradleに以下を追加
// アプリアイコンにブランチ名、コミットのhash値、ビルド日時を表示する場合は
// ビルド引数に -PiconVersioningを渡すこと。
if (project.hasProperty('iconVersioning')) {
apply plugin: 'app-icon-overlay'
appiconoverlay {
textColor '#000000FF'
backgroundColor '#BEBEBEEE'
format '$branch\n$commit\n' + new Date().format('yyyy/MM/dd')
imageMagick 'convert'
}
}
// androidセクションより上にappiconoverlayセクションを定義する
android {...}
注意点
注意点