Build.gradle에서 빌드 분기하기 (Flavor)

지프치프·2023년 6월 30일
0

Android

목록 보기
71/85
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

앱을 개발하면 하나의 코드(프로젝트)로 여러 개의 앱을 만들어야 할 때가 있다. 그렇다고 앱 마다 프로젝트를 또 만들 수도 없는 노릇이다.
하지만 gradle에서 설정을 추가해주면
빌드 구성을 다르게 하여 하나의 프로젝트로 여러 개의 앱을 만들 수 있다.
아래에서 살펴보도록 하자

productFlavors

build.gradle(app) 내 에서 productFlavors 블록을 사용하면
여러 개의 버전으로 앱을 빌드할 수 있다.
이를테면 운영 버전과 개발 버전을 나누어서 빌드할 수도 있다.

productFlavors {
	release {
    	~ 운영 버전 ~
    }
    
    dev {
    	~ 개발 버전 ~
    }
}

여기서 각 버전에 맞게 applicationId를 작성하면
패키지명이 달라지기 때문에 여러 개의 앱을 빌드, 설치할 수가 있다!

BuildConfig를 설정하여 상수값을 버전에 맞게 다르게 설정해줄 수도 있다.

아래의 샘플 코드에서 자세히 살펴보자

flavorDimensions "prod"
productFlavors {
	prod {
    	dimension "prod"
    	applicationId "com.sample.prod"
        
        buildConfigField("String", "PRODUCT_TYPE", "PRODUCT")
        manifestPlaceholders = [
        	urlScheme: "myOtherAppProduct"
        ]
    }
    
    dev {
    	dimension "dev"
    	applicationId "com.sample.dev"
        
        buildConfigField("String", "PRODUCT_TYPE", "DEVELOP")
        manifestPlaceholders = [
        	urlScheme: "myOtherAppDev"
        ]
    }
}

위에서 말한 바와 같이 applicationIdBuildConfig는 물론 Manifest 상수까지도 각 버전에 맞게 설정할 수 있다.

이제 각 버전에 맞게 코드를 작성했다면 flavorDimensions를 사용하여 빌드에 적용할 버전을 설정해주면 된다.

주의

buildTypes의 type과 flavor의 이름이 겹치면 안된다.
이를테면

productFlavors {
	release {
    	~~ 중략 ~~
    }
}

buildTypes {
	release {
    	~~ 중략 ~~
    }
}

위와 같이 이름이 동일하게 되면 아래와 같은 빌드 에러를 만나게 될 것이다.

ProductFlavor names cannot collide with BuildType names

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글