release apk파일들은 각기 다른 변수를 사용해서 다르게 만들어져야 했다.
1. 소스코드에서 gradle의 변수에 접근가능한 방법이 필요했다.
일반적으로 BuildConfig를 이용하면 Gradle의 변수에 접근 가능하다.
BuildConfig.DefinedName
DefinedName을 하기 위해서는 gradle에서 buildConfigField를 이용하면 된다.
다음과 같이 boolean 타입의 변수를 정의해서 소스에서 접근할 수 있다.
android {
defaultConfig{
buildConfigField "boolean", "DefinedName", "false"
}
}
2. Release할 때, 다양한 타입의 릴리즈파일을 생성하려면, productFlavors를 이용한다.
다음과 같이 flavorDimensions를 설정하고 productFlavors에서 release타입에 맞는
변수와 dimension을 설정하면 한번의 release동작으로 여러가지 apk를 생성할 수 있다.
BuildConfigField에서 정의된 DefinedName이 변하므로 빌드될 때, 소스코드가 변경되어 전혀다른 종류의 APK를 생성할 수 있다.
android {
flavorDimensions "myOut"
productFlavors {
product1 {
dimension "myOut"
buildConfigField "boolean", "DefinedName", "true"
}
product2 {
dimension "myOut"
buildConfigField "boolean", "DefinedName", "false"
}
}
}
3. Release파일이름의 변경.
release파일이름은 보통 app이름 + release인 app_release.apk 기본 형태로 생성된다.
이 부분을 flavorName으로 바꾸고 싶은 경우 다음과 같이 사용해보자.
myApp_product1.apk, myApp_product2.apk 형태로 release 파일을 생성할 수 있다.
android{
release {
applicationVariants.all { variant ->
variant.outputs.all {
def flavorName = variant.productFlavors[0].name;
outputFileName = "myApp_${flavorName}.apk"
}
}
}
}