IT_Programming/Dev Tools

Android 빌드 타입별로 APK 생성하기

JJun ™ 2014. 8. 8. 10:08



 출처: http://novafactory.net/archives/3143





gradle logo

안드로이드 애플리케이션을 개발하다 보면, 빌드타입별, 마켓별 APK 를 따로 생성해줘야하는 경우가 많습니다.
gradle 빌드를 사용한다면 buildTypes 를 이용해 한번의 빌드로 여러 상황에 맞는 APK 를 생성할 수 있습니다.

 

Keystore 생성하기

먼저 release 빌드를 위해 keystore 를 생성해줍니다. 이미 사용할 keystore 가 있는 경우에는 따로 생성하지 않아도 됩니다.
Java 가 가지고 있는 keytool 유틸리티로 keystore 를 생성해줍니다.

생성된 keystore 를 안드로이드 프로젝트 안에 복사해줍니다.
전 projectRoot/app/keystore 에 복사해봤습니다.


Copy keystore

 

build.gradle 에 Singning 설정 추가하기

빌드툴 20버전에, 안드로이드 그래들 플러그인 0.12를 사용할 때
기본적으로 생성되는 build.gradle 의 내용은 아래 코드와 같습니다.

build.gradle 의 android 블럭 안에 signingConfigs 를 추가해줍니다.
보통의 경우 release 에 keystore 로 sign 할 것이므로 release 만 추가해줍니다. 
keystore 생성시 password 가 6자 이상이어야 해서 test를 두번 붙여서 password 로 설정해줬습니다.

이제 buildTypes 의 release 에서 signingConfigs 를 사용할 수 있도록 수정해줍니다.

gradle 의 assemble task 를 실행해 APK의 생성을 확인해줍니다.
Terminal 에서 그래들, 그래들 래퍼를 통해 assemble 을 실행하거나, Android Studio 우측에 있는 Gradle 탭에서 실행할 수 있습니다.


Execute assemble task



생성된 파일은 projectRoot/app/build/outputs/apk 디렉토리에서 확인할 수 있습니다. 
빌드툴 버전이 올라갈때마다 바뀌곤 하는데,,, 금방 또 바뀌진 않겠죠.

 

APK 파일이름에 날짜와 버전 넣기

APK를 계속해서 생성하다 보면, 빌드후의 결과물인 APK에 대해 날짜와 버전별로 관리하고 싶어집니다.
build.gradle 의 android 블럭에 applicationVariants.all 을 추가하면 파일 이름을 재설정 할 수 있습니다.

 

Multiple Build Type(Deploy phase) 설정 추가하기

build.gradle 에서 BuildConfig 에 접근해서 값을 바꾸기 위해 buildConfigField 를 사용해줍니다.

아래 코드와 같이 type, name, value 를 지정해주면, build 시에 BuildConfig 에 field 로 추가해줍니다.
이 설정을 이용해 buildTypes 에서 각 빌드별로 필요한 값을 변경할 수 있게됩니다.

아마 그래들 플러그인 0.6(?) 정도까지는 buildConfig “public static final boolean release = true;” 와 같은 식으로 쓰다
그래들 플러그인 0.7 이후(그래들 1.9 이후인듯) buildConfigField 로 대체된 것 같습니다.
구글 그룹스 adt-dev 에 Jake Wharton 님이 답변한게 있더군요. 
https://groups.google.com/d/msg/adt-dev/AJCdoXZT2DY/wIaEFdhjHBIJ

기본적으로 type 에는 primitive type 이나 String 정도만 사용할 수 있는데(import 가 자동으로 안되므로),
package 경로까지 다 붙여주면 직접 만든 Class 도 사용할 수 있습니다.

저는 setting 이라는 package 를 만들고 DeployPhase enum 을 만들어서 처리해봤습니다.

이제 이 DeployPhase enum 을 reference 해서 build.gradle 을 수정해줍니다.


코드를 수정한 후, IDE에서 sync 를 하거나 직접 build 를 해주면 BuildConfig 에 DEPLOY_PHASE 라는 필드가 추가된 걸 확인할 수 있습니다.

이제 BuildConfig.DEPLOY_PHASE 값을 사용하면 앱에서 각 배포 단계에 맞는 설정들을 할 수 있게 됩니다.

위에서 만든 BuildConfig.DEPLOY_PHASE 값을 사용해 Server url 을 초기화 하는 예시입니다. 
아래와 같은 식으로 여러가지 설정, 값들을 바꾸어 주면 assemble task 를 한번 실행하면서
각 buildType 에 맞는 APK 를 생성할 수 있습니다.

 

Example repository

References



AndroidGradleBuildExample-master.zip
0.12MB