LoginSignup
27
22

More than 5 years have passed since last update.

ProductFlavorを使って環境ごとに変数を切り替えてapkを生成する

Posted at

AndroidアプリでサーバーサイドAPIとの通信を実装する場合、通信するサーバーサイドのエンドポイントをdevelopment/productionと切り替えることがあるかと思います。
今までは定数ファイルとかにフラグを作成して、ハードコードで切り替えていたのですが、最近gradleのproductFlavorsを使えば、うまく切り替えることができることを知ったので備忘録です。

設定方法

以下のように、build.gradleにproductFlavorsを追記します。

build.gradle

android {

    // ~~~

    buildTypes {
        release {
            // proguard設定
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            zipAlignEnabled true
        }
        debug {}

    productFlavors {
        development {
            setApplicationId("my.app.dev")
            manifestPlaceholders = [appName:"開発MyApp"]
            buildConfigField "boolean", "DEVELOPMENT_MODE", "true"
        }
        preproduction {
            setApplicationId("my.app.pre")
            manifestPlaceholders = [appName:"プレMyApp"]
            buildConfigField "boolean", "DEVELOPMENT_MODE", "true"
        }
        production {
            setApplicationId("my.app")
            manifestPlaceholders = [appName:"MyApp"]
            buildConfigField "boolean", "DEVELOPMENT_MODE", "false"
        }
    }
}

ビルド時にBuildConfig.javaが自動生成されるので、上記のbuildConfigFieldで設定した定数をアプリから呼び出せるようになります。
呼び出し方は下記のような感じ。


if (BuildConfig.DEVELOPMENT_MODE) {
    return "https://development-api.example.com/";
}

return "https://production-api.example.com/";

コマンドラインから各ProductFlavorを使用してのビルド方法

ProductFlavorのキーとBuildTypeを組み合わせた文字列をgradlewに渡してあげると、ビルドが始まりapkファイルを生成することができます。

コマンド例

BuildTypeがdebug、ProductFlavorがdevelopmentの場合
./gradlew assembleDevelopmentDebug
BuildTypeがdebug、ProductFlavorがpreproductionの場合
./gradlew assemblePreproductionDebug

※ デフォルトの設定だと、apkファイルは/app/build/outputs/apk/以下に生成される。

上記のようにgradlewでビルドするためのコマンドは、以下のコマンドで確認できます。

./gradlew tasks
27
22
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
27
22