본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] 빌드 변형 구성 (ProductFlavors) 한 개의 프로젝트로 여러개의 앱 만들기

by MinChan-Youn 2022. 4. 21.

안녕하세요~ 챠니입니다! :)

 

오늘은 AndroidProject에서 build.gradle파일에서 빌드변형구성(ProductFlavors)을 활용하여 하나의 프로젝트에서 여러개 packageName 및 appName을 가진 앱을 만드는 방법에 대해서 알아보겠습니다.

이번에 소개하는 내용은 무조건적인 정답은 아니라고 생각합니다.
하지만 제가 배우고 적용하면서 편리했던 내용을 정리한것이기 때문에 여러분들이 필요한 부분만 활용하여 사용하시는 것을 추천 드립니다.

 

Android Developer 빌드 변형 구성

https://developer.android.com/studio/build/build-variants?hl=ko 

 

빌드 변형 구성  |  Android 개발자  |  Android Developers

빌드 변형을 구성하여 단일 프로젝트에서 여러 버전의 앱을 만드는 방법을 알아보세요.

developer.android.com

 

1.  Flavors 설정(빌드 변형 구성)

 

● Build - Edit Flavors...

 

● Build Variants - Modules - Flavors - "+" - Add Flavor Dimemsion

 

● flavorDimension 이름 입력

 

● 생성된 flavorDimension 확인

 

● flavorDimension하위 Add Product Flavor 생성

 

Product Flavor 이름 입력 (1번째)

 

 Product Flavor 이름 입력 (2번째)

 

● 생성된 flavorDimension 및 Product Flavor 확인 - Apply - OK

 

● Build.gradle(:app) 생성된 flavorDimemsions 및 productFlavors 확인

 

● 좌측하단 Build Variants클릭 - Active Build Variant 항목에서 app1, app2 (Debug, Release) 선택하여 앱 빌드가능

 

2.  Flavors에 따라 새로운 앱으로 빌드하는 방법

 

● productFlavors에 따라 앱을 구분하는 변수 설정

ex) versionCode, versionName, applicationId, appName 등등 Flavor에 따라 변경되어야하는 설정(변수 등)을 설정합니다.

 

 

 아래 코드를 보고 필요한 파일에 사용될 변수등을 확인하여 선언합니다.

/** ProductFlavors */
    flavorDimensions 'test_flavor'
    productFlavors {
        app1 {
            dimension 'test_flavor'
            versionCode 1
            versionName "1.1"
            applicationId "com.example.app1"

            /** (manifest) 변수 삽입 */
            manifestPlaceholders = [appName: "@string/app_name"]
            /** (Layout) 변수 삽입 */
            resValue("string", "TestValue", "com.example.test.app1")
            /** (buildConfig) 자바 변수 삽입 */
            buildConfigField "String", "TestValue", "\"com.example.test.app1\""
        }
        app2 {
            dimension 'test_flavor'
            versionCode 2
            versionName "2.1"
            applicationId "com.example.app2"

            /** (manifest) 변수 삽입 */
            manifestPlaceholders = [appName: "@string/app_name"]
            /** (Layout) 변수 삽입 */
            resValue("string", "TestValue", "com.example.test.app2")
            /** (buildConfig) 자바 변수 삽입 */
            buildConfigField "String", "TestValue", "\"com.example.test.app2\""
        }
    }

 

Tip:
1. manigestPlaceholders는 여러개 선언한는 것이 아닌 "[ ]"안에 여러 변수를 선언 해야함
2. applicationIdSuffix ".example1" 등을 선언하게 되면 applicationId뒤에 ".example1"이 붙여지게 됨

 

최종 빌드된 2개의 Android Application

 

 

 

여기까지 build.gradle을 활용하여 하나의 프로젝트로 2개의 서로 다른 앱을 빌드 하는 방법에 대해서 알아보았습니다.

물론 코드가 서로 공통되는 부분이 많이 없다면 다른 프로젝트로 관리하는 것이 좋다고 저는 생각합니다.

 

하지만 요즘은 하이브리드앱처럼 겉모양은 Native, 실제 메인은 WebView를 통해서 앱을 운영한다면, 실제 돌아가는 코드는 동일하고 앱을 구분하는 설정값만 다른것이기 때문에 다음과같이 ProductFlavor를 통해 빌드하는 방법도 나쁘지 않다고 생각합니다.

 

개발에는 정답이 없지만 시간을 단축할 수 있고, 사용자에게 편리함을 제공하는 방법은 여러가지가 있기 때문에 많은 방법에 대해서 알아두면 좋겠습니다.

 

 

 

예제 소스코드

[예제 소스코드]
ProductFlavors: https://github.com/younminchan/kotlin-study/tree/main/ProductFlavors_kotlin

 

GitHub - younminchan/kotlin-study: kotlin 다양한 예제코드

kotlin 다양한 예제코드. Contribute to younminchan/kotlin-study development by creating an account on GitHub.

github.com

 

 

 

질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

응원의 댓글은 저에게 큰 힘이 된답니다! :)

즐거운 하루되세요!

 

깃허브 보러 놀러오세요 👇 (맞팔환영)

https://github.com/younminchan

 

younminchan - Overview

안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

github.com