안녕하세요. 오늘 포스팅은 'Flavors로 여러 버전별 빌드' 입니다.
개발중인 프로젝트를 테스트하는 과정에서 다수의 APK를 배포해야할 경우가 있습니다. 그런 경우 필드 값이나 flag 값을 변경해서 업데이트 후 테스트를 진행 했었는데 Flavors를 사용하면 더 간편하게 빌드할 수 있다는걸 알게되어 포스팅을 합니다.
buildTypes
기본적으로 AndroidStudio에서 프로젝트를 생성하면 debug,release 2가지 버전의 빌드 버전을 생성합니다.
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
app레벨의 build.gradle에서 위와 같이 확인할 수 있습니다. debug 버전은 따로 명시되어 있지 않지만, 위와 같은 옵션들이 디폴트로 설정되어 있습니다.
'minifyEnabled' 은 빌드시 불필요한 코드 및 리소스를 축소 시켜 apk의 용량을 줄여줍니다. 하지만 빌드시 시간이 오래걸리기 때문에 release단계에서 사용하는걸 권장합니다. 그리고 minifyEnabled는 프로가드 유/무를 뜻하기도 합니다.
productFlavors 이용하기
빌드 타입과는 다른 제품 버전을 설정할 수 있습니다. 제품 버전별 설정값을 다르게해서 똑같은 여러개의 앱을 빌드할 수 있습니다.
예를들어 광고의 유/무를 나타내는 필드 값을 다르게 설정해 광고가 있는 버전과 없는 버전을 나눠서 빌드하기 때문에 테스트시 용이합니다.
그리고 gradle에 defaultConfig의 모든 속성을 지원하기 때문에 버전 코드와 버전 이름도 다르게 지정할 수 있습니다.
productFlavors {
dev {
applicationIdSuffix ".dev"
versionCode 1
versionName "1.0.0"
buildConfigField "String", "url_base", "\"www.naver.com\""
manifestPlaceholders = [appLabel: "1번앱"]
}
ope {
applicationIdSuffix ".ope"
versionCode 1
versionName "1.0.0"
buildConfigField "String", "url_base", "\"www.naver.com\""
manifestPlaceholders = [appLabel: "2번앱"]
}
}
위 예시는 앱의 이름과 'url_base'이름을 가진 String 변수의 값을 이분화 시켰습니다.
applicationIdSuffix 속성을 이용하면 '설정패키지명. applicationIdSuffix' 으로 패키지명이 바뀌기때문에 2개의 앱을 생성할 수 있습니다.
- applicationIdSuffix : 어플리케이션 아이디의 접미사
- crunchPngs : 압축되지 않은 png 리소스를 줄인다. ( 릴리즈는 기본 true , 빌드시간 증가 )
- debuggable : ( 해당 apk의 디버그 가능 여부, 디폴트로 생성되는 debug와 release 단계중 debug는 true ) d
- minifyEnabled : 사용하지 않는 자바 코드 제거 ( 디폴트 false , 릴리즈는 디폴트 true )
- buildConfigField : buildConfig 파일에 새로운 필드를 추가합니다.
flavorDimensions 이용하기
제품 버전과 빌드 유형외의 더 많은 버전의 조합을 사용하고자 할때는 flavorDimensions 속성을 사용합니다. flavorDimensions을 사용하면 '차원'이라는 이름으로 buildType, productFlavors 과 더 많은 조합의 버전을 생성할 수 있습니다.
flavorDimensions 에 정의된 차원들을 구분하기 위해선 각 제품 버전에 dimension 속성으로 명시해서 구분해야합니다.
※단, 안드로이드 스튜디오 3.0부터는 단일차원을 사용하더라도 flavorDimension을 명시해줘야 빌드시 에러가 발생하지 않습니다. 명시하지 않을 경우 에러가 발생합니다. Error:All flavors must now belong to a named flavor dimension. The flavor 'flavor_name' is not assigned to a flavor dimension.
flavorDimensions "flavors"
productFlavors {
dev {
dimension "flavors"
applicationIdSuffix ".dev"
versionCode 1
versionName "1.0.0"
buildConfigField "String", "url_base", "\"www.naver.com\""
manifestPlaceholders = [appLabel: "1번앱"]
}
ope {
dimension "flavors"
applicationIdSuffix ".ope"
versionCode 1
versionName "1.0.0"
buildConfigField "String", "url_base", "\"www.naver.com\""
manifestPlaceholders = [appLabel: "2번앱"]
}
}
빌드타입 선택
안드로이드 스튜디오 좌측 'Build Variants'를 선택하시면 빌드타입별 빌드가 가능합니다.
빌드타입 비생성
varianFilter를 사용해서 위 사진의 드롭다운 박스에 빌드타입을 비노출할 수 있습니다.
android.variantFilter { variant ->
def name = variant.getFlavors().get(0).name
def isDebug = variant.buildType.name.equals('debug')
//if (name1.equals('ignoredName1') && name2.equals('ignoredName2') && isRelease)
if (name.equals("flavors") && isRelease)
variant.setIgnore(true);
}
포스팅을 마칩니다.
참고자료
※해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다.
'안드로이드 > 자바' 카테고리의 다른 글
[안드로이드/Android] ADB 사용하기 (0) | 2018.12.17 |
---|---|
[안드로이드/Android] 이미지 리사이즈 (0) | 2018.04.07 |
[안드로이드/Android] SNS 링크 공유하기 (0) | 2018.03.07 |
[안드로이드/Android] 쿠키매니저 다루기 (0) | 2018.02.27 |
[안드로이드/Android] 애드몹 보상형 광고 넣기 (0) | 2018.02.19 |