Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FlavorDimension 적용기

Realm
November 05, 2015

FlavorDimension 적용기

GDG Android 서울 10월 안세원님의 발표 "FlavorDimension 적용기"

Realm

November 05, 2015
Tweet

More Decks by Realm

Other Decks in Technology

Transcript

  1. 프로젝트를 하다보니... • signing 구분도 필요하고 - debug / release

    • 서버 구분도 필요하고 - dev / real → 여기까진 build type / flavor 를 이용해서 잘 커버가 되었다. 야호! • buildVariants: devDebug , devRelase, realDebug, realRelase
  2. 프로젝트를 하다보니... • signing 구분도 필요하고 - debug / release

    • 서버 구분도 필요하고 - dev / real → 여기까진 build type / flavor 를 이용해서 잘 커버가 되었다. 야호! • buildVariants: devDebug , devRelase, realDebug, realRelase → 근데 하다보니 minSdkLevel 구분도 필요해졌다
  3. 세가지 독립된 구성을 어떻게 만드나? • 몇 가지 방법을 생각해봤는데…

    ◦ build type 을 이중화? debugIcs, debugBelowIcs, … ◦ flavor를 이중화? IcsReal, IcsDebug, BelowIcsReal, BelowIcsDebug, .. → 다 구리다. 더 좋은 방법 없을까?
  4. FlavorDimension In some case, one may want to create several

    versions of the same apps based on more than one criteria. For instance, multi-apk support in Google Play supports 4 different filters. Creating different APKs split on each filter requires being able to use more than one dimension of Product Flavors. http://tools.android.com/tech-docs/new-build-system/user-guide → flavorDimension을 끼얹으면 어떨까! (옛날 이름은 flavorGroup)
  5. FlavorDimension 선언 • build type: debug / release • flavorDimension:

    api / server ◦ api Dimension: belowIcs / ics ◦ server Dimension: dev / real • buildVariants: dimension_1 * dimension_2 * build_type ◦ flavorDimension 정의 순서가 중요 android { ... flavorDimensions "api", "server" productFlavors { belowIcs { flavorDimension "api" ... } dev { flavorDimension "server" ... } } }
  6. Gradle 에서 활용 & BuildConfig.java • version code generation http://stackoverflow.com/questions/27508708/android-gradle-1-0-computing-version-code-in-multi-flavor-setup#

    • BuildConfig.java → FLAVOR_API , FLAVOR_SERVER 등의 상수 추가됨 applicationVariants.all { variant -> // get the version code of each flavor def apiVersion = variant.productFlavors. get(0).versionCode def abiVersion = variant.productFlavors. get(1).versionCode // set the composite code variant.mergedFlavor.versionCode = apiVersion * 1000000 + abiVersion * 100000 + defaultConfig.versionCode }
  7. 곁다리 두번째 주제: staged rollout & multiple apk 두 개의

    apk 동시 릴리즈: ICS이상/미만 → 구글 플레이의 multiple apk support http://developer.android.com/google/play/publishing/multiple-apks.html 만약 staged rollout 적용하고 싶다면? → 둘 한꺼번에 staged rollout 못함 다음 중 선택해야… 1) A를 먼저 100%로 내보낸 후, B를 staged rollout 2) A를 staged rollout -> 100%로 내보낸 후, B를 릴리즈