LoginSignup
3
2

More than 5 years have passed since last update.

apkバージョンとサイン設定を環境変数で設定する

Posted at

目標

  • リリースビルドのバージョンを自動的に設定する。
  • 同じコミットが同じバージョンになる ("再現できるビルド")。
  • サインキーなどをコミットに残さない。
  • これらの設定を必須としない: 開発者がcloneしてからすぐ実行できる。

原理

  • コミット自身の情報で、バージョンを生成する
  • バージョンとサイン設定を環境変数としてインジェクトする
  • 上記環境変数がない場合、暗黙的にデフォルト設定を使う

コード

build.gradle:

// 環境変数をString / Integerに読み込む関数
def env = { System.getenv it }
def envInt = { Integer.parseInt(env(it)) }

android {
    defaultConfig {
        if (env("ANDROID_VERSION_CODE")) {
            // 環境変数のバージョンを優先に使う
            versionCode envInt("ANDROID_VERSION_CODE")
            versionName env("ANDROID_VERSION_NAME")
        } else {
            // 環境変数がなければデフォルト設定を使う
            versionCode 1
            versionName "1.0"
        }
    }
}

if (env("ANDROID_SIGN_APK"))
// サイン設定: 環境変数がある場合のみ適用される
android {
    signingConfigs {
        releaseSigning {
            storeFile file(env("ANDROID_KEYSTORE_PATH"))
            storePassword env("ANDROID_KEYSTORE_PASS")
            keyAlias env("ANDROID_KEY_ALIAS")
            keyPassword env("ANDROID_KEY_PASS")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.releaseSigning
        }
    }
}

CIサーバのビルドコマンド:

#!/bin/bash

# JDK & SDKパス
export ANDROID_HOME=/somewhere/android-sdk-linux
export JAVA_HOME=/somewhere/jdk1.8.0_65

# サイン設定
export ANDROID_KEYSTORE_PATH=/somewhere/keys.jks
export ANDROID_SIGN_APK=yes
export ANDROID_KEYSTORE_PASS=secret
export ANDROID_KEY_ALIAS=secret
export ANDROID_KEY_PASS=secret

# バージョン設定
# versionCode: 現在のコミットからたどり着けるコミットの数 (=== 先祖コミット数+1)。
# リリースブランチであればたいてい単調増加する。連続ではないが。
export ANDROID_VERSION_CODE="$(git rev-list HEAD --count)"
# versionName: 現在のコミットSHA1の最初の8文字
export ANDROID_VERSION_NAME="${GIT_COMMIT:0:8}"

exec sh gradlew assembleRelease
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2