Android
gradle
CircleCI

CircleCI 2.0でAndroidアプリのversionCodeにビルド番号を付ける

More than 1 year has passed since last update.

CircleCI 1.0と2.0で環境変数の使い方が異なり、小一時間ハマったのでメモ。

参考

https://discuss.circleci.com/t/using-environment-variables-in-config-yml-not-working/14237/6

やり方

.circleci/config.yml
version: 2
jobs:
  build:
    working_directory: ~/code
    docker:
      - image: circleci/android:api-26-alpha
    environment:
      JVM_OPTS: -Xmx3200m
    steps:
      - checkout
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
+     - run:
+         name: Export version code
+         command: echo 'export ORG_GRADLE_PROJECT_VERSION_CODE="$CIRCLE_BUILD_NUM"' >> $BASH_ENV
      - run:
          name: Download Dependencies
          command: ./gradlew androidDependencies
      - save_cache:
          paths:
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Run Builds
          command: ./gradlew assembleDebug
      - store_artifacts:
          path: ./app/build/outputs/apk/app-debug.apk
          destination: /app-debug.apk
app/build.gradle
android {
    defaultConfig {
        applicationId "com.example.hoge"
        minSdkVersion 26
        targetSdkVersion 26
-       versionCode 1
+       versionCode VERSION_CODE as int
        versionName "1.0"
    }
}
gradle.properties
+ VERSION_CODE=1

何をしているか

.circleci/config.yml

  • build.gradleで置き換えるVERSION_CODE(CIRCLE_BUILD_NUM)をBASH_ENVへ出力している
    • 「ORG_GRADLE_PROJECT_」というプレフィックスで始まる変数を定義しておくと、Gradleのビルドスクリプト内から、プロジェクトのプロパティとして参照できるようになる

app/build.gradle

  • VERSION_CODEをCIRCLE_BUILD_NUMに置き換えている

gradle.properties

  • ローカル環境でビルドエラーとならないように、デフォルト値を設定している