まずは手動でやる
パッケージ名や一部のパラメータだけを変更するような APK が必要な場合、 Android では Build types や Product flavors と呼ばれる仕組みを使って一部のみを差し替えたビルドを簡単に作成することができます。
そのためには以下のようにします。
android {
...
buildTypes {
release {
...
}
debug {
...
}
preview {
// preview ビルド用のベースとなるビルド設定を記述する
}
preview_foo {
initWith preview
applicationIdSuffix '.foo'
buildConfigField 'String', 'SOME_PARAM', '"foo"'
}
preview_bar {
initWith preview
applicationIdSuffix '.bar'
buildConfigField 'String', 'SOME_PARAM', '"bar"'
}
preview_baz {
initWith preview
applicationIdSuffix '.baz'
buildConfigField 'String', 'SOME_PARAM', '"baz"'
}
}
...
sourceSets {
preview_foo {
setRoot 'src/preview'
}
preview_bar {
setRoot 'src/preview'
}
preview_baz {
setRoot 'src/preview'
}
}
}
dependencies {
...
preview_fooCompile 'com.example:somelibrary:1.0.0-alpha'
preview_barCompile 'com.example:somelibrary:1.0.0'
preview_bazCompile 'com.example:somelibrary:1.0.1'
}
しかし、受託開発時などには動作確認用のビルドなどが たくさん 必要になることがあります。
しかも2, 3回しか使わなかったり、急に新しいものが必要になったり、とにかく手動でビルド設定を増やしたりするのはそれなりに手間がかかります。
ビルド毎に依存関係を変更しなければならない場合など尚更です。
動的にやる
そのような場合は動的にビルド設定を定義できると便利です。
Gradle では以下のように記述することが出来ます。
def previewConfigs = [
foo: [someParam: 'foo', dependencyVersion: '1.0.0-alpha'],
bar: [someParam: 'bar', dependencyVersion: '1.0.0'],
baz: [someParam: 'baz', dependencyVersion: '1.0.1'],
]
android {
buildTypes {
release {
...
}
deubg {
...
}
preview {
// preview ビルド用のベースとなるビルド設定を記述する
}
previewConfigs.each { name, config ->
"preview_$name" {
initWith preview
applicationIdSuffix ".$name"
buildConfigField 'String', 'SOME_PARAM', "\"${config.someParam}\""
}
}
}
...
sourceSets {
previewConfigs.each { name, config ->
"preview_$name" {
setRoot 'src/preview'
}
}
}
}
dependencies {
...
previewConfigs.each { name, config ->
"preview_${name}Compile" "com.example:somelibrary:${config.dependencyVersion}"
}
}
このように previewConfigs
を定義し、各種の設定ではその値を使用するように指定することで、とても簡単に動的にビルド設定を追加、変更、削除することができます。