[Android] 한 번에 상수가 다른 여러 apk 만들기

6205 단어 Android

환경

  • Android Studio 3.4.1
  • 하고 싶은 일

  • 생산 서버를 한 번에 구축하고 검증하는 apk
  • 원본 코드(상수 등)를 매번 변경하고 싶지 않음
  • 검증 서버를 위한 apk의versionName을 변경하여 이해하기 쉽도록 합니다
  • 방법


    Gradle 설정 예


    수정app/build.gradle.buildTypes{}에 추가release_stage{}.(이름은 임의)
    샘플은 기본적으로 기존release{} 복제품이지만 buildConfigFieldversionNameSuffix를 추가했다.
    app/build.gradle
    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를 의미합니다.자바에서 상수를 정의하는 설정입니다.
    형식은 buildConfigField "定数の型", "定数名", "値" 입니다.release{}에 기본값defaultConfig {}으로 추가됩니다.
    이번 샘플buildConfigField은 다음과 같고 추가 상수BuildConfig.java는 다음과 같다.
    BuildConfig.java
    public final class BuildConfig {
    
    ...省略
    
      // Fields from default config.
      public static final String PRODUCTION_MODE = "PRODUCTION";
    
    이번 샘플 중 상술한 상수PRODUCTION_MODE의 값
    반영PRODUCTION_MODEapk에서release{}반영"PRODUCTION"의 apk에서 release_stage{}.
    이번에는 원본 코드에서 다음과 같은 처리로 나뉜다.
    void hoge() {
        switch (BuildConfig.PRODUCTION_MODE) {
            case "PRODUCTION"
                // 本番サーバー向けの処理
                break;
            case "STAGE"
                // 検証サーバー向けの処理
                break;
        }
    }
    

    "STAGE" 란 무엇입니까?

    versionNameSuffixversionNameSuffix 끝에 연결할 문자열을 정의하는 설정입니다.
    이번 샘플 중versionName반영versionNameapk에서release{}반영"1.0"의 apk에서 release_stage{}.

    apk 구축 방법

    "1.0_stage" → 선택Build선택Ganerate Signed Bundle / APK...APK
    Key store를 선택하고 password를 입력하고 Next 를 선택합니다.
    Next 중에서 Build Variantsrelease 두 가지를 선택하고 release_stage 을 선택합니다.

    기본적으로 Finish 아래에 디렉터리를 만들고 환경마다 apk를 만듭니다.
    앞에서 말한 바와 같이, 모든 apk의 내부 상수와versionName이 변경되었습니다.

    끝내다


    이번에는 연결 대상 서버의 용도를 변경하고 다른 것도 적용할 수 있다.
    더 좋은 방법이 있으면 좋겠어요.

    좋은 웹페이지 즐겨찾기