【Android】アプリケーションの開発で環境を切り替えてビルドする方法

クライアントサーバー型のアプリケーションを開発していると、開発/ステージング/本番でそれぞれビルドを用意しなくてはならないときがあります。

ほとんどの開発現場でこのようなサーバー構成を取っているのではないかと思います。

今回は環境毎に用意されたstring.xmlを読み込む方法をまとめてみました。

環境の切り替え

Build Variants

切り替えは Android Studio の左下の Build Variants をクリックします。

すると Build Variants のウィンドウが出ますので、ここで切り替えを行います。

しかし、初期状態では debug と release の二つしかありません。

これはビルドする際のオプションのことで、今回やろうとしている環境ごとのビルドとは関係ありません。

ここに冒頭の「3つの環境」×「オプションの2つ」の計6個の Build Variants を表示する方法が次の手順になります。

Build Variantsの修正

環境を追加

app/build.gradle

productFlavors に各環境を定義します。

    // フレーバーディメンション
    flavorDimensions "default"
    // プロダクトフレーバー
    productFlavors {
        develop {
            applicationId = '[パッケージ名].dev'
        }
        staging {
            applicationId = '[パッケージ名].stg'
        }
        product {
            applicationId = '[パッケージ名]'
        }
}

applicationId にはパッケージ名を指定しますが、ここを環境ごとに変えておくことで、一つのデバイスに全てのバージョンをインストールすることが可能になります。

flavorDimensions は productFlavors が複数あるとき優先順位を決めなくてはいけないので一旦 default としておきます。

これを追記したら右上に出る Sync Now を押します。

Sync後

app/build.gradle の同期が完了すると先ほどの Build Variants が以下のようになります。

環境ごとの定数ファイル

これで切り替えはできるようになりましたが、ここまでくると環境ごとの定数が必要になる場合が多いと思います。

一般的に定数ファイルとして使われる strings.xml を、環境ごとに用意することができます。

以下のようにディレクトリで分けてそれぞれの strings.xml を用意します。

開発用

app/src/develop/res/values/strings.xml

<resources>
    <string name="app_name">Test_dev</string>
    <string name="hello_text">Hello Develop!!</string>
</resources>

ステージング用

app/src/staging/res/values/strings.xml

<resources>
    <string name="app_name">Test_stg</string>
    <string name="hello_text">Hello Staging!!</string>
</resources>

本番用

app/src/product/res/values/strings.xml

<resources>
    <string name="app_name">Test</string>
    <string name="hello_text">Hello Product!!</string>
</resources>

使用例

((TextView) findViewById(R.id.hello_text)).setText(getString(R.string.hallo_text));

実際に使用する場合は環境を意識することなく R.string.hello_text で呼び出します。

このとき参照するファイルは Build Variants で指定された環境のファイルを見に行きます。

また、これらの異なる環境を持ったアプリケーションは、それぞれ異なるパッケージ名を持っているので、一つのデバイスに共存が可能となっています。

実行例

開発

ステージング

本番

アプリケーションアイコン

アプリケーションについてもapp_nameを環境毎に設定しいるので、共存が可能になります。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)