JQ Blog

ビルド環境設定(Android Studio)

アプリを開発するとき、ビルドを分けて開発することになるので、ビルド環境を分ける方法についてまとめてみた。

AndroidStudio

AndroidStudioの場合はモジュールのbuild.gradleで設定ができる。
最初プロジェクトを作ってbuild.gradleをみると下のようにdebugとreleaseがdefaultに設定されているのが確認できる。 Alt text 環境を分けるには二つの方法がある。buildTypesを追加するのとproductFlavorsを追加すること。

BuildTypes

まず、staging環境を作りたいとしたら、
上段のバーの Build -> Edit Build Types のところでビルドタイプを下のように追加する。
Alt text Alt text すると、buildTypesに追加されることが確認できる。
Alt text もし、それぞれの機能や設定を指定する場合は、たとえば、WebviewのそれぞれのurlをセッティングするときだとしたらBuildConfig.BUILD_TYPEメソッドを使って分岐して処理することができる。

1
2
3
4
5
6
7
if (BuildConfig.BUILD_TYPE.equals("debug")) {
    mWebView.loadUrl(DEV_URL);
} else if (BuildConfig.BUILD_TYPE.equals("staging")) {
    mWebView.loadUrl(STG_URL);
} else {
    mWebView.loadUrl(RELEASE_URL);
}


ProductFlavors

ここで同じソースコードを使って別のアプリを作らなきゃいけないときがあるかもしれない。たとえば、無料バージョンと有料バージョンを分けるとしたらProductFlavorsを設定する。
上段のバーの Build -> Edit Flavor のところでflavorを追加する。 Alt text Alt text すると、productFlavorsに追加されることが確認できる。 Alt text productFlavorsもBuildConfig.FLAVORを使って分岐ができる。

1
2
3
4
5
if (BuildConfig.FLAVOR.equals("free")) {
    mWebView.loadUrl(FREE_URL);
} else {
    mWebView.loadUrl(PAID_URL);
}


上の画像をみたらわかるように各flavorの下にbuildTypesがつく。今までのセッティングでfreeDebug,freeStaging,freeRelease,paidDebug,paidStaging,paidRelease全部で6個のビルドが生成される。
で、問題はこの分けられた6個のビルドのapplicationIdやversionNameが同じでインストールやリリースのときにうまくできないことだ。なので、applicationIdSuffix,versionNameSuffixを使ってそれぞれのapplicationIdとversionNameを持つようにする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
buildTypes {
    release {
        ...

        ...
    }
    staging {
        ...

        applicationIdSuffix '.staging'
        versionNameSuffix '-staging'

        ...
    }
    debug {
        ...

        applicationIdSuffix '.debug'
        versionNameSuffix '-debug'

        ...
    }
}
productFlavors {
    paid {
        ...

        applicationIdSuffix '.free'
        versionNameSuffix '-free'

        ...
    }
    free {
        ...

        applicationIdSuffix '.staging'
        versionNameSuffix '-staging'

        ...
    }
}

そして、アプリ名も別にする必要があるので設定させる。アプリ名はAndroidManifestで変更できるが。
Alt text build.gradleでmanifestPlaceholdersを使ったらAndroidManifestで使用できる。たとえば、

1
manifestPlaceholders = [appName: "environment"];

上のように設定すると、AndroidManifestで

1
android:label="${appName}"

こういうふうに使うことができる。