무료앱 유료앱 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> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
|
--> android:label="${appLabel}"
로 설정해주면 됩니다..!
더 자세한 내용은
구글 공식 문서를 참고하시면 될꺼같습니다..!
https://developer.android.com/studio/build/build-variants?hl=ko