개발새발 블로그
무료앱 유료앱 2가지 버전 만들기! Flavors를 적용해보자! 본문
안녕하세요! 개발새발로 코딩하는 블로그입니다.
오늘 알아볼주제는 Flavors 입니다!
우선 Flavors란 무엇일까요?
- Flavors란 소스코드는 대부분 일치하지만 다른앱을 만들고싶을떄 유용하게 사용됩니다.
예를들어 내용은 같지만 앱아이콘은 다르게하고싶다던지 업로드하는 스토어에 따라 메인페이지를 다르게 띄운다던지, 유료앱과 무료앱으로 2개의 버전으로 배포를 한다던지 하는상황입니다..!
간단하게)
1. 유료앱/무료앱을 다르게 하고 싶은 경우
2. 배포하는 마켓에 따라서 표시하는 내용이나 값을 다르게 하고 싶은 경우
3. 고객용/관리자용 혹은 고객용/업체용 등으로 버전을 나누어야 하는 경우
4. 기획자가 개발,스테이징,운영 환경에 따른 각각의 앱동작을 확인하고 싶은 경우
5. 국가별/언어별로 앱의 내용을 달리 해서 보여주고 싶은 경우
가 있겠습니다.
유료앱 무료앱 생성으로 예를 들어보죠!
STEP 1.
< build.gradle (App) 전체 >
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.test.flavors"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "versionCode"
productFlavors {
free {
applicationIdSuffix ".free"
versionCode 32
versionName "3.0.2"
}
paid {
applicationIdSuffix ".paid"
versionCode 40
versionName "4.0.0"
}
}
}
|
android { } 안에 아래 내용을 작성해줍니다.
flavorDimensions "versionCode"
productFlavors {
free {
applicationIdSuffix ".free"
versionCode 1
versionName "1.0.0"
}
paid {
applicationIdSuffix ".paid"
versionCode 2
versionName "1.0.1"
}
}
|
flavorDimensions "versionCode" 라고 작성한 후
productFlavors 안에 free{} 와 paid{} 로 나누겠습니다.
applicationIdSuffix ".free" 와 applicationIdSuffix ".paid" 라고 두가지를 작성합니다.
기존 applicationId 가 com.test.flavors 였다면,
com.test.flavors.free
com.test.flavors.paid
가 생성됩니다.
versionCode, versionName을 각각 설정해서 버전관리를 해주도록 합니다.
sync now를 하고나면 아래이미지처럼 Build Variants가 나뉘어짐을 확인할 수 있습니다.
STEP 2.
이제 유료앱 무료앱 구분을위해 변수를 추가해주겠습니다.
flavorDimensions "versionCode"
productFlavors {
free {
applicationIdSuffix ".free"
versionCode 1
versionName "1.0.0"
buildConfigField 'boolean', 'IS_PAID', "false"
}
paid {
applicationIdSuffix ".paid"
versionCode 2
versionName "1.0.1"
buildConfigField 'boolean', 'IS_PAID', "false"
}
}
|
--> buildConfigField 'boolean', 'IS_PAID', "true or false"
로 설정하여 광고를 다는 코드쪽에서 구분할 수 있도록 변수를 만들어줍니다.
그러면 아래 코드처럼 변수를 사용할 수 있습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 광고추가 예시
* */
if(BuildConfig.IS_PAID){
// PAID true 이므로 광고제거
}else{
// 광고 추가
}
}
|
앱이름 변경은 어떻게하죠?
STEP 1.
flavorDimensions "versionCode"
productFlavors {
free {
applicationIdSuffix ".free"
versionCode 1
versionName "1.0.0"
buildConfigField 'boolean', 'IS_PAID', "false"
manifestPlaceholders = [ appLabel: "Flavor(무료)" ]
}
paid {
applicationIdSuffix ".paid"
versionCode 2
versionName "1.0.1"
buildConfigField 'boolean', 'IS_PAID', "true"
manifestPlaceholders = [ appLabel: "Flavor(유료)" ]
}
}
|
--> manifestPlaceholders = [ appLabel: "Flavor(무료)" ]
처럼 해당 빌드를 할때 사용할 앱 네임을 설정해주고,
STEP 2.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${appLabel}"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
|
--> android:label="${appLabel}"
로 설정해주면 됩니다..!
더 자세한 내용은
구글 공식 문서를 참고하시면 될꺼같습니다..!
https://developer.android.com/studio/build/build-variants?hl=ko
'android' 카테고리의 다른 글
R8 난독화 적용하기 & apk 디컴파일 확인하기 (0) | 2020.03.29 |
---|---|
URL Scheme 연동 방법 (0) | 2020.03.05 |
간단한 예제로 보는 Dagger2 적용해보자! - 개발새발블로그 (0) | 2020.02.02 |
저장된 Json 데이터 읽기 (0) | 2019.12.11 |
WebView안에서 javascript 사용하기 (0) | 2019.12.05 |