앱 개발을 하다보면 테스터들의 요청으로 앱을 분리 시켜야 할 때가 있습니다. 예를들면 ‘운영앱하고 개발앱하고 같이 설치할 수는 없나요?’같은 요청인데요. 개발하는 입장에서도 운영앱과 개발, 테스트앱이 함께 설치될 필요가 있을 수 있습니다. 아주 예전에는 페키지명(bundle id) 를 변경 해주고 빌드를 다시해서 운영앱과 개발앱을 함께 설치 할 수있도록 해주곤 했습니다. 정말 귀찮은 일이고 귀찮다고 소스를 분리해 버리면 운영앱과 개발앱 소스 버전 관리가 힘들어 지기때문에 은근히 골치하픈 이슈 중 하나입니다.
하지만 build.gradle파일에 buildTypes과 몇가지 설정을 해주면 간단히 위와 같은 문제를 해결할 수가 있는데요
- 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" 이렇게 변경해 줘야 합니다.
혹시 틀리거나 궁굼한 부분이 있으면 문의 주세요
감사합니다.
'IT 개발' 카테고리의 다른 글
[SQL] Update 문 (0) | 2020.06.30 |
---|---|
버전비교 스크립트 (javascript) (0) | 2020.06.29 |
맥에서 마우스와 트렉패드 스크롤 각각 다르게 인식시키는 프로그램 (0) | 2020.06.05 |
[Android] intent 란? (의미) (0) | 2020.06.04 |
[xcode 오류]missing required architecture arm64 수정 (0) | 2020.06.01 |
댓글