build.gradle 의 android 블럭 안에 signingConfigs 를 추가해줍니다. 보통의 경우 release 에 keystore 로 sign 할 것이므로 release 만 추가해줍니다. keystore 생성시 password 가 6자 이상이어야 해서 test를 두번 붙여서 password 로 설정해줬습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
...
android{
...
signingConfigs{
release{
storeFile file("./keystore/test.keystore")
storePassword"testtest"
keyAlias"nova"
keyPassword"testtest"
}
}
...
}
이제 buildTypes 의 release 에서 signingConfigs 를 사용할 수 있도록 수정해줍니다.
build.gradle 에서 BuildConfig 에 접근해서 값을 바꾸기 위해 buildConfigField 를 사용해줍니다.
아래 코드와 같이 type, name, value 를 지정해주면, build 시에 BuildConfig 에 field 로 추가해줍니다. 이 설정을 이용해 buildTypes 에서 각 빌드별로 필요한 값을 변경할 수 있게됩니다.
1
buildConfigField"<type>","<name>","<value>"
아마 그래들 플러그인 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 을 만들어서 처리해봤습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
packagesetting;
publicenumDeployPhase{
Debug(1),
Stage(2),
Release(3);
intvalue;
DeployPhase(intvalue){
this.value=value;
}
publicstaticDeployPhase findByValue(intvalue){
switch(value){
case1:
returnDebug;
case2:
returnStage;
case3:
returnRelease;
default:
returnnull;
}
}
}
이제 이 DeployPhase enum 을 reference 해서 build.gradle 을 수정해줍니다.
이제 BuildConfig.DEPLOY_PHASE 값을 사용하면 앱에서 각 배포 단계에 맞는 설정들을 할 수 있게 됩니다.
위에서 만든 BuildConfig.DEPLOY_PHASE 값을 사용해 Server url 을 초기화 하는 예시입니다. 아래와 같은 식으로 여러가지 설정, 값들을 바꾸어 주면 assemble task 를 한번 실행하면서 각 buildType 에 맞는 APK 를 생성할 수 있습니다.