일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ReactDOM
- ViewGroup
- ConstraintLayout
- props
- 안드로이드
- javascript
- .kt
- cardview
- component
- Anko SQLite
- LinearLayout
- android
- Kotlin
- react
- Git
- http
- java
- function scope
- RelativeLayout
- Retrofit2
- vim
- intent
- layout
- RecyclerView
- Eclipse
- block scope
- view
- permission
- Anro Coroutines
- linux
- Today
- Total
이것저것 다 개발
[Android] Flavor 사용하기 (빌드 변형 구성) 본문
Flavor을 이용한 1개의 소스로 여러가지 버전의 앱 만들기
projectFlavors 를 사용하면
기능은 같지만 이름만 다르게 한 앱, 무료/유료 버전의 앱을 구분, SDK 버전에 따른 앱이라던지
하나의 소스로 여러 버전의 앱을 만들 수 있습니다.
먼저 build.gradle(app) 파일에 flavor 설정이 필요합니다.
productFlavors {} 블록에 원하는 설정을 구성합니다.
defaultConfig 는 ProductFlavor 클래스에 속해 있으므로 모든 defaultConfig {} 블록 안의 기본 구성을 사용할 수 있습니다.
예) productFlavors {} 블록 내부에 versionCode를 명시하지 않아도 defaultConfig {} 블록의 versionCode를 사용함.
build.gradle 설정하기
아래는 free version과 paid version 두 가지 버전의 예시 입니다.
free {} 블록과 paid {} 블록을 만들어 각각의 설정을 추가합니다.
build.gradle(Module: app)
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.yongyi.flavor"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "version"
productFlavors {
free {
dimension "version"
manifestPlaceholders = [
appLabel: "Free-Flavor"
]
applicationIdSuffix ".free"
versionCode 10000
versionName "1.0.0"
buildConfigField "String", "EXPLAIN", "\"This is FREE-FLAVOR application\""
resValue "string", "appName", "Free-Flavor"
}
paid {
dimension "version"
manifestPlaceholders = [
appLabel: "Paid-Flavor"
]
applicationIdSuffix ".paid"
versionCode 20000
versionName "2.0.0"
buildConfigField "String", "EXPLAIN", "\"This is PAID-FLAVOR application\""
resValue "string", "appName", "Paid-Flavor"
}
}
}
위와 같은 설정을 마치고 나면 Build Variants의 달라진 점을 확인할 수 있습니다.
free version 과 paid version 의 각각의 Debug, Release가 생긴걸 확인할 수 있습니다.
App 빌드 시 선택해서 빌드하면 됩니다.
각각의 속성 설명
flavorDimensions 는 간략하게 설명하자면 빌드의 구분을 나타냅니다.
"api", "mode", "version" 등 api 버전에 따른 구분, 앱의 기능에 따른 구분, version에 따른 구분 등을 나타냅니다.
manifestPlaceholders 는 AndroidManifest.xml 파일에서 ${appLabel} 처럼 사용할 수 있습니다.
applicationIdSuffix 는 defaultConfig에 명시된 applicationId 뒤에 붙게 됩니다.
각각의 version의 ApplicationId 를 구분하게 해줍니다.
buildConfigField는 BuildConfig라는 클래스에서 호출할 수 있는 값입니다.
BuildConfig.##### 으로 사용합니다.
resValue 는 문자열 정의로 @string/##### 와 같이 사용할 수 있습니다.
strings.xml 파일에서 문자열을 정의해서 사용하는 것과 같습니다.
manifestPlaceholders 사용 예시
AndroidManifest.xml
android:label="${appLabel}"
BuildConfig 사용 예시
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView tvVersion;
TextView tvExplain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvVersion = (TextView) findViewById(R.id.tv_version);
tvExplain = (TextView) findViewById(R.id.tv_explain);
tvVersion.setText(getAppVersion());
tvExplain.setText(BuildConfig.EXPLAIN);
}
public String getAppVersion() {
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(this.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return packageInfo.versionName;
}
}
결과물
'Android' 카테고리의 다른 글
[Android] startActivityForResult (0) | 2019.01.10 |
---|---|
[Android] ProgressDialog 사용하기 (0) | 2018.07.13 |
[Android] ConstraintLayout (0) | 2018.06.12 |
[Android] OpenWeatherMap 날씨 API 사용 앱 만들기 (14) | 2018.05.28 |
[Android] Retrofit2 사용해보기 (2) | 2018.05.25 |