Study/Java, Android

[Gradle] Android build variants

BlueBright 2019. 5. 10. 11:14

build.gradle (보통 Module:app)으로 가서 직접 작성하거나

 

안드로이드 스튜디오 상단 툴바 메뉴에서

File → Project Structure → Build Variants

에 가면 설정이 가능하다.

 

 

< 소스 세트 우선 순위 > 왼쪽이 우선 순위가 가장 높음

빌드 변형 (build variant) > 빌드 유형 (build type) > 제품 버전 (product flavor) > 기본 소스 세트 (main source set) > 라이브러리 종속성 (library dependencies)

 

 

 

 

< Build Variants >

 

공통 : Build Types와 Flavors에서 공통적으로 설정할 수 있는 옵션

   
Application Id Suffix  
Version Name Suffix  
ProGuard Files  
Matching Fallbacks   
Signing Config   
Multi Dex Enabled   
Manifest Placeholders  

 

 

Build Types : 개발 과정에 따른 분리 (예 : 디버그 모드, 릴리즈 모드, 베타 모드 등)

   
Debuggable  
Jni Debuggable  
Renderscript Debuggable  
Renderscript optimization Level  
Minify Enabled  
Zip Align Enabled  

 

 

Flavors : 동일한 앱의 서로 다른 버전 (예 : 유료앱, 무료앱, VVIP 등)

 

   
Dimension  
Min SDK Version   
Max SDK Version   
Application Id   
Target SDK Version  
Resource Configs   
Test instrumentation runner class name   
Test instrumentation Runner Arguments   
Test Functional Test   
Test Handle Profiling   
Test Application ID   
Version Code   
Version Name  

 

※ flavorDimensions

만일 flavor를 정의하고자 하면, 비록 1차원이라도 이녀석을 정의하는 것이 좋다고 한다. (안드로이드 스튜디오 3.0 이슈)

 

관련 스택 오버플로우 링크

 

Android Studio 3.0 Flavor Dimension Issue

Upgraded to Studio Canary build. My previous project of Telegram Messenger is giving following error. Error:All flavors must now belong to a named flavor dimension. The flavor 'armv7' is not ass...

stackoverflow.com

 

소스세트

리소스의 경우에는 flavor에서 지정한 resource와 main을 기준으로 resource가 병합된다. 그래서 병합할 데이터를 잘 설정해야 한다.

 

...더보기

"도감" 관련된 앱을 만든다고 가정을 하고, 데이터는 Assets에 저장되어 있다고 하자.

1) flavor "과일" - 과일 데이터

2) flavor "채소" - 채소 데이터

3) main은 "종합 도감" - 과일데이터, 채소데이터

 

여기서 1번 과일 앱을 빌드를 하면, 과일 앱에서 채소 데이터가 보이게 된다. (반대로 2번도 상황이 비슷하다)

기본적으로 main과 resource가 병합이 되기 때문에 main이 가지고 있는 데이터도 같이 취급하게 되는 것이다.

이럴 때는 차라리 아래와 같이 설정하는 것이 좋다.

 

1) flavor "과일" - 과일 데이터

2) flavor "채소" - 채소 데이터

3) flavor "종합 도감" - 과일데이터, 채소데이터

4) main - 이 쪽에는 데이터를 두지 않는다.

 

이렇게 설정하면 main에 데이터가 없기 때문에 main과 병합이 되어도 문제가 없게 된다.

(물론 sourceSets를 잘 설정해줘야한다.)

 

 

코드(자바코드) 의 경우에는 병합이 되지 못한다. 만일 같은 클래스를 사용하고 싶다면 main에다만 소스코드를 남겨두거나,  (상단의 접은 글의 방법처럼) main폴더에 소스코드를 없애고, 다른 flavor에서 각자 정의 하는 방법을 사용해야 한다.

 

 

 

※ BuildConfig.DEBUG issue

 

https://medium.com/@elye.project/checking-debug-build-the-right-way-d12da1098120

 

Checking DEBUG build the risky way!

Do you know that using BuildConfig.DEBUG to check for Debug Build is risky? Although it works, could be wrong sometimes?

medium.com

해당 포스트에 의하면 어플리케이션이 디버그 모드일지라도 BuildConfig.DEBUG 값이 항상 true을 반환하는 것은 아니라고 한다. BuildConfig가 어떤 패키지를 이용하는지 확인하거나 (라이브러리에 있는 BuildConfig를 가져오면 결과가 달라질수 있다.) 해당 포스트에서 제공하는 코드를 사용하면 된다.

 

boolean isDebug = ((getContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);

 

 

 

 

 

 

※ 참고 자료

안드로이드 개발자 페이지, 빌드 구성

 

빌드 구성  |  Android Developers

Android 빌드 시스템은 앱 리소스 및 소스 코드를 컴파일하고 여러분이 테스트, 구축, 서명 및 배포할 수 있는 APK로 패키징합니다. Android Studio는 고급 빌드 툴킷인 Gradle을 사용하여 빌드 프로세스를 자동화하고 관리하는 한편, 여러분은 유용한 사용자설정 빌드 구성을 정의할 수 있습니다. 각 빌드 구성에서는 자체적인 코드 및 리소스 세트를 정의할 수 있으며, 모든 앱 버전에 공통되는 부분을 재사용하기도 합니다. Gradle용 And

developer.android.com

안드로이드 개발자 페이지, 빌드 변형

 

빌드 변형 구성  |  Android Developers

이 페이지는 빌드 개요를 토대로 하며, 단일 프로젝트에서 다양한 버전의 앱을 생성하기 위해 빌드 변형을 구성하는 방법과 종속성 및 서명 구성을 올바로 관리하는 방법을 보여줍니다. 각 빌드 변형은 여러분이 빌드할 수 있는 다양한 버전의 앱을 나타냅니다. 예를 들어, 콘텐츠가 제한된 무료 버전의 앱을 빌드하고, 더 많은 콘텐츠가 포함된 유료 버전의 앱을 빌드할 수 있습니다. 또한 API 레벨이나 기타 기기 변화에 따라 다양한 기기에 맞게 다양한 버전의 앱을

developer.android.com

 

장범석님 블로그

 

[안드로이드] Gradle로 여러가지 버전 생성하기

현업 개발자로써 삽질하는 과정을 기록하는 블로그입니다.

dktfrmaster.blogspot.com

 

박상권님의 삽질블로그

 

[안드로이드/Android]Flavors로 같은 소스코드 다른앱 만들기

저는 개인앱을 여러개 운영하고 있습니다. 앗! 이 포스팅을 통해 제 개인앱중 몇가지를 소개해 드리겠습니다. #특가특공대 - 특가항공권 프로모션/이벤트 정보 알림 https://play.google.com/store/apps/details?..

gun0912.tistory.com

우늬님 블로그

 

[안드로이드/Android] Flavors로 여러 버전별 빌드

안녕하세요. 오늘 포스팅은 'Flavors로 여러 버전별 빌드' 입니다. 개발중인 프로젝트를 테스트하는 과정에서 다수의 APK를 배포해야할 경우가 있습니다. 그런 경우 필드 값이나 flag 값을 변경해서 업데이트 후..

superwony.tistory.com

 

GitHub (android best practices)

 

futurice/android-best-practices

Do's and Don'ts for Android development, by Futurice developers - futurice/android-best-practices

github.com