코딩하는 일용직 노동자

Release/Dev (상용/개발) 패키지, 앱이름 분리하기 본문

안드로이드

Release/Dev (상용/개발) 패키지, 앱이름 분리하기

bacass 2021. 8. 1. 14:28

회사에서 상용버전의 앱을 운영하는 경우나, 상용버전과 개발버전을 앱에 다 설치하고 테스트하려는 경우 패키지명을 바꿔서 테스트를 하는 불편함이 있었습니다.

이럴경우 gradle 에서 상용버전과 개발버전의 패키지명을 쉽게 바꿀수 있는 옵션을 이용하면 편리합니다.


#1 app레벨의 gradle 파일에 옵션 추가하기
   아래처럼 buildTypes 의 debug 에 applicationIdSuffix ".dev" 을 추가하면 debug 모드로 빌드할때는 기본적인 패키지명 뒤에 .dev 가 붙게 됩니다.

#2 매니페스트 앱이름 등 바꿔주기
   한 기기에 상용버전과 개발버전의 앱을 다 설치해야 하기 때문에 manifestPlaceholders 를 이용해서 앱이름과 아이콘을 나눠주도록 아래 처럼 추가합니다.

   또한 manifest 에 xmlns:tools="http://schemas.android.com/tools" 를 추가해주어야 합니다.
   그리고  <application> 안에 tools:replace="icon, label" 추가해야만 gradle 설정한 appName, appIcon 매핑이 됩니다.

   또한 파일이나 url 공유할때 사용하는 fileprovider 를 이용할 경우에도 패키지명을 아래처럼 다르게 명시해줘야 합니다.
   fileprovider 를 사용할때 이 작업을 하지 않은 상태에서 앱을 빌드하려고 하면 아래의 에러가 발생하면서 빌드가 안됩니다.
   The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER 

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        manifestPlaceholders=[
        	appName:"@string/app_name", 
            appIcon:"@drawable/ic_launcher", 
            fileprovider:"com.lee.storagetest.fileprovider"
        ]
    }

    debug {
        applicationIdSuffix ".dev"

        manifestPlaceholders=[
        	appName:"StorageDev", 
            appIcon:"@drawable/ic_launcher_dev", 
            fileprovider:"com.lee.storagetest.dev.fileprovider"
        ]
    }
}

xmlns:tools 를 추가해준다.
lable 에 gradle 에서 만들어준 appName, appIcon 을 넣어준다.
provider 를 이용한다면 gradle 에서 지정해준 fileprovider 변수를 가져다 쓰도록 셋팅해준다.