Skip to content

hanjuwan/FlavorSample

Repository files navigation

FlavorSample

Flavors Sample

이클립스때와는 달리 안드로이드 스튜디오에서는 One Source Multi Application을 위한 기능 제공을 하고 있다.

안드로이드 스튜디오에서 제공하는 빌드변형구성은 Flavors  기능을 통해 여러가지 빌드형태를 제공하고 

Android ID를 gradle 옵션을 통해 분기시키거나, 앱아이콘, 혹은 변수까지도 변경할 수 있다.


대표적인 사용목적

- 빌드형태에 따른 앱 분리(개발/운영 , 무료/유료)

- 여러개의 앱을 하나의 소스로 만드는 경우



일단 아래순서로 하나씩 따라해보자.


1.빌드변형추가

2.리소스 분리

3.변수 분리

4.결과보기



1. 빌드변형추가 productFlavors 

일단 가장 기본인 productFlavors 를 추가한 후 gradle Sync를 해주자.

product 키워드를 추가하고 하위에 application id , version 등을 분기하여 수정이 가능하다.

(buildConfigField 는 3.변수분리에서 설명)


android {

flavorDimensions "mode"

productFlavors {
aaaa {
dimension "mode"
applicationId "com.lasselindh.aaaa"
versionCode 101
versionName "1.0.1"
buildConfigField "String", "LASSELINDH", "\"AAAA\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "0"
}

bbbb {
dimension "mode"
applicationId "com.lasselindh.bbbb"
versionCode 102
versionName "1.0.2"
buildConfigField "String", "LASSELINDH", "\"BBBB\""
buildConfigField "boolean", "isTrue", "true"
buildConfigField "int", "Type", "1"
}
}

}

 gradle Sync 시 gradle 에 아래와 같이 빌드옵션이 추가되고, Build Variants 에도 추가된 빌드 옵션이 나타난다.


2. 리소스분리

리소스는 sourceSets 를 통해 빌드변형 키워드와 동일하게 등록하고 폴더경로는 따로 지정이 가능하다.

일반적으로 sourceSets를 설정하지 않는 경우 main 과 동일 레벨로 생성되기 때문에 

어플리케이션의 갯수가 많아지면 main을 찾기 어려워 질 수 있으므로 폴더를 따로 지정하여 하위에 두도록 아래와 같이 설정이 가능하다.

각 res 상의 string.xml , ic_launcher 등을 수정하여 앱이름, 앱 아이콘등도 변경할 수 있다.

sourceSets {
main {
res.srcDirs = ['src/main/res']
}
aaaa {
res.srcDirs = ['src/myfolder/aaaa/res']
}
bbbb {
res.srcDirs = ['src/myfolder/bbbb/res']
}
}

[##_1N|cfile29.uf@999A4F3A5B343C3407BDEC.png|width="200" height="241" filename="3.png" filemime="image/jpeg" style="width: 200px; height: 241px;" original="yes"|_##]





3. 변수분리

gradle 상에서 product에 따라 BuildConfigField를 정의 하였고

BuildConfigFiled 는 소스상에서 아래와 같이 활용가능하다.

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)

tvMessage.text = BuildConfig.LASSELINDH
if(BuildConfig.isTrue) {

} else {

}
var type = BuildConfig.Type
}



4. 결과보기

http://lasselindh.tistory.com/5



난 이런거 필요없어요..단순하게 운영/개발만 분리하고 싶어요 라고 생각하시는분은 

더욱간단한 방법이 있으니 아래 링크에서 확인하세요.


소스코드 수정없이 개발/운영 패키지, 앱이름, 옵션 분리하기

http://lasselindh.tistory.com/1

Releases

No releases published

Packages

No packages published

Languages