【Kotlin/Android Studio】ビルド環境を変更する方法!buildConfigField
この記事からわかること
- Android Studio/Kotlinでビルド環境を変更する方法
- debugやdevelop、staging、releaseなど
- APIURLや設定情報を環境ごとに変えるには?
- buildConfigFieldやresValueの使い方
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Narwhal Feature Drop
- Kotlin:2.1.10
- Material3
- AGP:8.9.2
- Gradle:8.11.1
- Mac M1:Sequoia 15.6.1
参考文献:公式リファレンス:Gradle-Tips
iOS(Xcode)でいうスキームで変更できるようなビルド時の環境の変更方法のAndroid版をまとめていきます。
おすすめ記事:【Xcode】開発環境(ReleaseとDebug)モードの切り替え方法
ビルド環境を変更する方法
Android Studioでビルド環境を追加するにはbuild.gradleファイルのbuildTypes内に環境を追加します。デフォルトでは以下のようにあらかじめreleaseのみが定義されています。
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
ここにdebugとstagingを追加する際は以下のようになります。中には環境ごとの設定を記述していきます。またこの際に上側に記述した環境がデフォルト適応されるようになります。
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
}
staging {
applicationIdSuffix ".staging"
debuggable true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
applicationIdSuffix
アプリのパッケージ名にサフィックスを追加できます。例:com.example.app.debug
debuggable
デバッグ情報を含めるかどうかを制御
minifyEnabled
ProGuard(またはR8)を使用してコードの最適化と難読化を有効にするかどうかを設定
initWith [環境名]
指定した環境設定を継承する
記述できたら「Sync Now」を押してプロジェクトに反映させます。またProduct Flavorという機能もありどちらかというと後述しているbuildConfigFieldはProduct Flavorで使うことが多いと思うので以下の記事も参考にしてください。
buildTypes {
debug {
applicationIdSuffix = ".debug"
isDebuggable = true
}
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
実際に環境を切り替える:buildConfigField
Android Studioで実際にビルドする際の環境を切り替えるには上部メニューの「Build」>「Select Build Variant...」をクリックします。すると右側に「Build Variants」メニューが出てくるのでそこからアクティブにする環境を変更することで切り替えることが可能です。
環境に応じてAPIのURLや設定を変更する方法
環境を切り分けたいときはAPIのURLが環境ごとに異なったり、設定情報を変更したい時だと思います。そのような時はbuildConfigFieldメソッドを使用します。引数にはデータ型、参照変数、値を渡します。
またresValueメソッドでリソースを追加することも可能です。
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
buildConfigField("String", "API_URL", "https://appdev-room.com/dev")
resValue("string", "api_name", "dev")
}
staging {
applicationIdSuffix ".staging"
debuggable true
buildConfigField("String", "API_URL", "https://appdev-room.com/stg")
resValue("string", "api_name", "stg")
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("String", "API_URL", "https://appdev-room.com/")
resValue("string", "api_name", "prd")
}
}
アプリ内から参照するには以下のようにします。
Log.i(TAG, BuildConfig.API_URL)
Log.i(TAG, getString(R.string.api_name))
AndroidManifest.xmlから変数を参照する
「AndroidManifest.xml」で参照する値を環境ごとに切り替えたい場合はmanifestPlaceholdersにKey-Value形式で値を指定することができます。
android {
buildTypes {
debug {
manifestPlaceholders = [
// テスト用
admobAppId: "ca-app-pub-3940256099942544~3347511713"
]
}
release {
manifestPlaceholders = [
// 本番用
admobAppId: "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"
]
}
}
}
「AndroidManifest.xml」側では以下のように${admobAppId}のような形式で値を指定することができます。
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="${admobAppId}"/>
「build.gradle.kts」の場合は以下のように指定します。
buildTypes {
debug {
// テスト用
manifestPlaceholders["admobAppId"] = "ca-app-pub-3940256099942544~3347511713"
}
release {
// 本番用
manifestPlaceholders["admobAppId"] = "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






