LoginSignup
4
1

More than 5 years have passed since last update.

動的に Build types を生成してビルドする

Last updated at Posted at 2018-02-21

まずは手動でやる

パッケージ名や一部のパラメータだけを変更するような 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 を定義し、各種の設定ではその値を使用するように指定することで、とても簡単に動的にビルド設定を追加、変更、削除することができます。

参照

4
1
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
4
1