본문 바로가기
IT 개발

[Android] buildTypes 를 이용한 운영/개발 빌드 분리

by 로보찌빠냥 2020. 6. 25.
반응형

앱 개발을 하다보면 테스터들의 요청으로 앱을 분리 시켜야 할 때가 있습니다. 예를들면 ‘운영앱하고 개발앱하고 같이 설치할 수는 없나요?’같은 요청인데요. 개발하는 입장에서도 운영앱과 개발, 테스트앱이 함께 설치될 필요가 있을 수 있습니다. 아주 예전에는 페키지명(bundle id) 를 변경 해주고 빌드를 다시해서 운영앱과 개발앱을 함께 설치 할 수있도록 해주곤 했습니다. 정말 귀찮은 일이고 귀찮다고 소스를 분리해 버리면 운영앱과 개발앱 소스 버전 관리가 힘들어 지기때문에 은근히 골치하픈 이슈 중 하나입니다.

하지만 build.gradle파일에 buildTypes과 몇가지 설정을 해주면 간단히 위와 같은 문제를 해결할 수가 있는데요

 

  1. build.gradle 파일 수정

우선 build.gradle 파일에 아래와 같이 debug{}를 추가해 줍니다.


buildTypes {
    release {
        manifestPlaceholders = [appName: "@string/app_name"]
        buildConfigField 'boolean', 'IS_PROD', "true"
    }
    debug {
        applicationIdSuffix ".dev"
        manifestPlaceholders = [appName: "@string/app_name_dev"]
        buildConfigField 'boolean', 'IS_PROD', "false"
    }
}

 

applicationIdSuffix 는 debug모드로 빌드 시 앱아이디 뒤에 붙을 문자열 입니다.

manifestPlaceholders 는 앱이 설치되고 아이콘 아래 표기되는 앱명을 분리하기 위해 추가해 주는 값으로 AndroidManifest.xml 내의 application 테그의 android:lable속성에 

android:label="${appName}"

위와같은 방식으로 매핑해주어 운영/개발을 분리하는 역할을 합니다.

예를들면 아이콘 아래 ‘운영앱’, ‘개발앱’ 이런 문구를 다르게 해줄 수 있는 것입니다.

 

그리고 buildConfigField 는 java나 kotlin 소스 내에서 buildConfig.으로 가져다 쓸 수 있어 개발 운영 설정이 다를 때 사용하려고 설정된 값입니다.

 

private static String COMPILE_MODE = BuildConfig.IS_PROD ? "REAL" : "DEV";

소스에서는 위와같이 사용할 수 있는것이죠.

 

적용하는 방법은 아래와 같습니다.

 

1. strings.xml 파일 수정

1번에서 언급한 manifestPlaceholders 값에 매핑할 값을 추가해 줍니다. 보통 app_name은 기본으로 있기 때문에 app_name_dev를 추가해 줍니다.

<string name="app_name">앱이름</string>

<string name="app_name_dev">앱이름 개발계</string>

 

2. AndroidManifest.xml 파일 수정

application 태그에 lable 값을 android:label="${appName}"  이렇게 수정합니다.
수정하는 이유는 위에 적혀있는것 처럼 release, debug로 각각 빌드 시 앱 이름을 다르게 해주기 위해서 입니다.

${appName}은  build.gradle에 정의된 manifestPlaceholders 의 값으로 매핑됩니다. build.gradle 에서는 또 @string/app_name 또는 @string/app_name_dev 와 매핑이 되어있고요

 

3. debug 폴더 및 google-services.json 파일 추가

만약 google-services.json 파일이 있다면 Project > app > src 폴더 아래 debug 폴더를 추가해주고 기존 google-services.json 파일을 복사해서 debug폴더 아래 붙여넣어주어야 합니다. 그리고 google-services.json 파일 내에 package 명에 build.gradle안에 applicationIdSuffix에 정의해 줬던 .dev 를 붙여줘야 합니다. 

"package_name": “페키지명.dev" 이렇게 변경해 줘야 합니다.

 

혹시 틀리거나 궁굼한 부분이 있으면 문의 주세요

감사합니다.

반응형

댓글