안녕하세요 점냥입니다 :)
회사 입사 초, 디버그 앱과 프러덕 앱이 분리되어 있지 않아 안드로이드 폰을 사용하고 있으신 직원분들의 불만 사항이 있었어요. 실제로 마켓을 통해 회사 서비스를 이용 중이던 직원분들은 매번 안드로이드 개발팀이 개발한 앱을 테스트하기 위해 출시 버전의 앱을 지우고 디버그 버전을 설치해야 번거로움이 있었어요. 이 문제는 출시 버전의 앱과 디버그 버전의 앱의 패키지가 같아서 독립적으로 앱을 가질 수 없었기 때문이에요.
디버그 앱, 출시 앱 패키지 다르게 하기
디버그 앱과 출시 앱을 동시에 설치할 수 있게 하는 방법은 아주 간단하게 두 버전의 앱의 패키지를 다르게 하면 됩니다. 그리고 Gradle은 이 기능을 buildType을 통해 아주 쉽게 제공해줍니다.
1. buildType으로 디버그와 출시 버전을 선언하기
//build.gradle(app)
buildTypes {
debug {
...
}
release {
...
}
}
buildTypes는 Gradle build이 선언한 Type에 맞춘 Gradle Option을 설정해줄 수 있어요. debug라는 Type과 release라는 Type을 선언해주고 각각 디버그 빌드와 출시용 빌드에 필요한 옵션을 설정해주려고 해요.
2. Gradle Option으로 debug 패키지 다르게 하기
// build.gradle(app)
android {
defaultConfig {
applicationId "com.mashup"
...
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
release {
...
}
}
Gradle은 applicationIdSuffix라는 옵션을 통해 메인 패키지 뒤에 접미사를 붙이는 기능을 제공해주는데요. 이 기능을 이용해서 쉽게 디버그 앱과 출시 앱의 패키지를 다르게 가져갈 수 있어요 :)
ex) 디버그 앱은 com.mashup.debug, 출시 앱은 com.mashup
이제 build Variant를 변경 가면서 디버그 앱과 출시 앱을 동시에 설치해보세요.
3. Firebase 설정해 주기 (Option)
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugGoogleServices'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
만약 Firebase SDK 설정되어 있던 프로젝트라면 해줘야 하는 설정이 있어요. Firebase의 google-services.json 파일에 선언되어 있는 패키지와 디버그 앱의 패키지가 다르기 때문에 빌드에 실패하게 돼요.
해결 방법은 쉬워요! 기존 app 폴더에 위치하고 있던 google-services.json 파일을 복사해서 app-src-debug 폴더에 붙여 넣어요. 그리고 해당 파일에서 package_name를 디버그 앱의 패키지로 수정하면 돼요
{
...
"client": [
{
"client_info": {
...
"android_client_info": {
"package_name": "com.mashup.debug"
}
},
"oauth_client": [
{
...
"android_info": {
"package_name": "com.mashup.debug",
"...
}
}
...
],
...
}
],
...
}
4. 디버그 앱과 출시 앱을 구분하기 쉽게 해 주기
디버그 앱과 출시 앱을 동시에 설치할 수 있게 되었지만, 어떤 앱이 디버그 앱인지 출시 앱인지 구분하기 어려워요. 간단한 설정으로 디버그 앱과 출시 앱의 변화를 줄 수 있어요.
앱 이름 다르게 하기
//build.gradle(app)
buildTypes {
debug {
manifestPlaceholders = ["appName":"@string/app_name_debug"]
...
}
release {
manifestPlaceholders = ["appName":"@string/app_name"]
...
}
}
<manifest ...>
<application
...
android:label="${appName}"
</...>
</...>
ManifestPlaceholdrs 기능을 통해 Manifest에 값으로 주입해서 이름을 달리할 수 있어요! 이와 비슷하게 회사에서는 앱 아이콘도 다르게 해서 훨씬 시각적으로 디버그 앱과 출시 앱을 분리하고 있어요~~
'Android > Common' 카테고리의 다른 글
[Android] Fragment에서 데이터 외부로 전달시키는 방법 - Callback (0) | 2022.12.03 |
---|---|
[Android] Very Long Vector Path 해결 (0) | 2022.11.18 |
[Android] Flow 흐름을 turbine으로 쉽게 테스트 코드 작성해보기 (2) | 2022.10.27 |
[Android] AAC ViewModel에서 Context 접근하는 방법 (0) | 2022.10.08 |
[Android] EventBus (0) | 2022.08.28 |