Android 디버그 빌드시 앱 아이콘이나 이름 바꾸기

예전에 안드로이드 디버그 빌드시 스토어 버전과 충돌하지 않도록 버전네임과 패키지네임을 바꾸도록 설정하는 글을 쓴 적이 있다.
하지만 이런 방법을 써도 나중에 앱을 실행할 때 런처가 두 개나 존재하는데 이름도 똑같고 아이콘마저 똑같아서 어떤 게 디버그 버전인지 구분이 가지 않는 문제가 있었고 아이콘이든 이름이든 바꿀 수 있으면 좋겠다고 생각했었다.

예전엔 못 찾았지만 오늘 스택오버플로를 뒤져보다가 방법을 찾았는데 번역된 리소스를 넣을 때 values-ko 같은 다른 이름의 디렉터리를 만드는 것과 비슷하게 src 디렉터리 밑에 main 대신 debug를 만들어 똑같은 구조를 만들어 두면 디버그 빌드시 해당 디렉터리 안의 리소스를 사용하게 된다. 나는 새로 이미지를 만들기 귀찮아서 런처의 이름만 바꿨지만 리소스든 뭐든 얼마든지 바꿀 수 있으니 디버그모드에만 보이는 기능을 추가할 수도 있겠다.

screenshot_20161204-215933

Android Studio를 사용해서 빌드를 했을 때 플레이 스토어 버전이 지워지는 경우

Android 앱을 만들어서 플레이 스토어에 배포를 하다보면 생기는 문제인데 IDE에서 빌드를 해서 폰에 앱을 올릴 경우 원래 있던 플레이 스토어에서 설치한 앱을 지우고 다시 설치하도록 되어있다. signing이 맞지 않아서 그렇다.
어차피 문제가 생기는 부분은 지우고 설치할 때 데이터가 날아가는 부분 말고는 없을 줄 알고 나는 여태까지 Titanium Backup을 이용해서 데이터만 살려내는 방식을 사용했다. 하지만 문제는 이것 뿐이 아니었다.

플레이 스토어에서 설치한 앱은 크래시가 발생하면 기본적으로 개발자에게 리포트를 할 수 있는 기능이 있다. 이 정보는 개발자가 버그를 고치는 데 엄청난 도움을 준다. 나 또한 내가 만든 앱을 밖에서 사용하다가 크래시가 나면 일단 리포트를 해 두고 집에 가서 확인을 한다.
하지만 개발중인 버전을 폰에 설치하게 되면 앱이 죽을 때 아무런 일도 발생하지 않고 “Unfortunatly ~~ is crached” 비스무리한 메시지만 뜨게 된다.

어떻게 방법이 없나 하고 트윗을 올렸더니 한 분이 패키지 네임을 다르게 하면 된다고 알려주셨다.
(다만 패키지 이름 뒤에 -debug를 붙이는 건 형식에 어긋나서 사용하지 못하고 .debug를 사용했다.)
패키지 네임이 다르면 당연히 다른 패키지로 인식하고 그러면 지우지 않고도 두 개의 앱이 한 번에 설치될 수 있다. 이 것을 gradle을 이용하면 매번 패키지네임을 바꾸지 않고 릴리즈용과 디버그용 앱의 패키지네임을 자동으로 다르게 설정할 수 있다.
그래서 build.gradle 파일을 어떻게 수정하면 되나 하고 찾아봤는데 buildTypes 밑에서는 applicationId를 사용할 수 없고 applicationIdSuffix라는 속성을 사용할 수 있었다. 그렇게 해서 build.gradle 파일을 이렇게 수정하였다.

<생략>
android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'

    defaultConfig {
        applicationId "kai.twitter.voice"
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 20
        versionName "1.4.0"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "-debug"
        }
        release {

        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}
<생략>

이제 개발을 하는 데 마음이 좀 편해졌다.
한 가지 문제점이 있다면 아이콘도, 이름도 똑같아서 앱 서랍에서는 구분을 할 수 없다는 정도 뿐이다.