FlavorDimension 적용기

1fa9cb8c7997c8c4d3d251fb5e41f749?s=47 Realm
November 05, 2015

FlavorDimension 적용기

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

1fa9cb8c7997c8c4d3d251fb5e41f749?s=128

Realm

November 05, 2015
Tweet

Transcript

  1. 2.

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

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

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

    • 서버 구분도 필요하고 - dev / real → 여기까진 build type / flavor 를 이용해서 잘 커버가 되었다. 야호! • buildVariants: devDebug , devRelase, realDebug, realRelase → 근데 하다보니 minSdkLevel 구분도 필요해졌다
  3. 4.

    세가지 독립된 구성을 어떻게 만드나? • 몇 가지 방법을 생각해봤는데…

    ◦ build type 을 이중화? debugIcs, debugBelowIcs, … ◦ flavor를 이중화? IcsReal, IcsDebug, BelowIcsReal, BelowIcsDebug, .. → 다 구리다. 더 좋은 방법 없을까?
  4. 5.

    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. 6.

    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. 7.

    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. 8.

    곁다리 두번째 주제: 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를 릴리즈