【Android】定数の異なる複数のapkを一度にビルドする
環境
- Android Studio 3.4.1
やりたいこと
- 本番サーバーと検証サーバー向けのapkを一度にビルドしたい
- 都度ソースコード(定数等)の変更はしたくない
- 検証サーバー向けの場合はapkのversionNameを変更して分かりやすくしたい
やり方
Gradle設定サンプル
- 本番サーバーと検証サーバー向けのapkを一度にビルドしたい
- 都度ソースコード(定数等)の変更はしたくない
- 検証サーバー向けの場合はapkのversionNameを変更して分かりやすくしたい
やり方
Gradle設定サンプル
app/build.gradle
を修正します。
buildTypes{}
の中にrelease_stage{}
を追加します。(名称は任意)
サンプルでは基本的に既存のrelease{}
のコピペですが、buildConfigField
とversionNameSuffix
を追加しています。
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildConfigField "String", "PRODUCTION_MODE", "\"PRODUCTION\""
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release_stage {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField "String", "PRODUCTION_MODE", "\"STAGE\""
versionNameSuffix "_stage"
}
}
}
buildConfigField
とは
buildConfigField
とは、BuildConfig.javaに定数を定義する設定であり、
書式はbuildConfigField "定数の型", "定数名", "値"
です。
デフォルト値(release{}
で有効になる値)としてdefaultConfig {}
にもbuildConfigField
を追加します。
今回のサンプルではBuildConfig.java
に以下の通り、定数PRODUCTION_MODE
が追加されます。
public final class BuildConfig {
...省略
// Fields from default config.
public static final String PRODUCTION_MODE = "PRODUCTION";
今回のサンプルでの上記の定数PRODUCTION_MODE
の値は、
release{}
が反映されたapkでは"PRODUCTION"
、
release_stage{}
が反映されたapkでは"STAGE"
になります。
今回はソースコード上で以下のように処理を分けました。
void hoge() {
switch (BuildConfig.PRODUCTION_MODE) {
case "PRODUCTION"
// 本番サーバー向けの処理
break;
case "STAGE"
// 検証サーバー向けの処理
break;
}
}
versionNameSuffix
とは
versionNameSuffix
とは、versionName
の末尾に結合する文字列を定義する設定です。
今回のサンプルでのversionName
は、
release{}
が反映されたapkでは"1.0"
、
release_stage{}
が反映されたapkでは"1.0_stage"
になります。
apkビルド方法
Build
⇒ Ganerate Signed Bundle / APK...
を選択
APK
を選択してNext
Key storeを選択、passwordを入力しNext
を選択。
Build Variants
でrelease
とrelease_stage
両方を選択しFinish
を選択。
デフォルトではapp
配下にディレクトリが作成され、環境ごとのapkが作成されています。
apkごとに前述の通り内部の定数やversionNameが変更されています。
おわりに
今回は接続先サーバーを変更する用途でしたが、ほかにも応用はできそう。
もっと良い方法があればご教授いただけると幸いです。
Author And Source
この問題について(【Android】定数の異なる複数のapkを一度にビルドする), 我々は、より多くの情報をここで見つけました https://qiita.com/tanakano/items/8234180de020c34c099c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .