Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발새발 블로그

무료앱 유료앱 2가지 버전 만들기! Flavors를 적용해보자! 본문

android

무료앱 유료앱 2가지 버전 만들기! Flavors를 적용해보자!

SeanBlog 2020. 2. 16. 17:23

안녕하세요! 개발새발로 코딩하는 블로그입니다.

오늘 알아볼주제는 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 

Comments