[Android] 한 번에 상수가 다른 여러 apk 만들기
6205 단어 Android
환경
하고 싶은 일
방법
Gradle 설정 예
수정app/build.gradle
.buildTypes{}
에 추가release_stage{}
.(이름은 임의)
샘플은 기본적으로 기존release{}
복제품이지만 buildConfigField
과versionNameSuffix
를 추가했다.
app/build.gradleandroid {
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를 의미합니다.자바에서 상수를 정의하는 설정입니다.
형식은 buildConfigField "定数の型", "定数名", "値"
입니다.release{}
에 기본값defaultConfig {}
으로 추가됩니다.
이번 샘플buildConfigField
은 다음과 같고 추가 상수BuildConfig.java
는 다음과 같다.
BuildConfig.javapublic final class BuildConfig {
...省略
// Fields from default config.
public static final String PRODUCTION_MODE = "PRODUCTION";
이번 샘플 중 상술한 상수PRODUCTION_MODE
의 값
반영PRODUCTION_MODE
apk에서release{}
반영"PRODUCTION"
의 apk에서 release_stage{}
.
이번에는 원본 코드에서 다음과 같은 처리로 나뉜다.void hoge() {
switch (BuildConfig.PRODUCTION_MODE) {
case "PRODUCTION"
// 本番サーバー向けの処理
break;
case "STAGE"
// 検証サーバー向けの処理
break;
}
}
"STAGE" 란 무엇입니까?
versionNameSuffix
은 versionNameSuffix
끝에 연결할 문자열을 정의하는 설정입니다.
이번 샘플 중versionName
반영versionName
apk에서release{}
반영"1.0"
의 apk에서 release_stage{}
.
apk 구축 방법
"1.0_stage"
→ 선택Build
선택Ganerate Signed Bundle / APK...
APK
Key store를 선택하고 password를 입력하고 Next
를 선택합니다.
Next
중에서 Build Variants
과 release
두 가지를 선택하고 release_stage
을 선택합니다.
기본적으로 Finish
아래에 디렉터리를 만들고 환경마다 apk를 만듭니다.
앞에서 말한 바와 같이, 모든 apk의 내부 상수와versionName이 변경되었습니다.
끝내다
이번에는 연결 대상 서버의 용도를 변경하고 다른 것도 적용할 수 있다.
더 좋은 방법이 있으면 좋겠어요.
Reference
이 문제에 관하여([Android] 한 번에 상수가 다른 여러 apk 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tanakano/items/8234180de020c34c099c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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"
}
}
}
public final class BuildConfig {
...省略
// Fields from default config.
public static final String PRODUCTION_MODE = "PRODUCTION";
void hoge() {
switch (BuildConfig.PRODUCTION_MODE) {
case "PRODUCTION"
// 本番サーバー向けの処理
break;
case "STAGE"
// 検証サーバー向けの処理
break;
}
}
이번에는 연결 대상 서버의 용도를 변경하고 다른 것도 적용할 수 있다.
더 좋은 방법이 있으면 좋겠어요.
Reference
이 문제에 관하여([Android] 한 번에 상수가 다른 여러 apk 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanakano/items/8234180de020c34c099c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)