LoginSignup
3
4

More than 5 years have passed since last update.

Androidのビルド時にビルドに関する情報を付加したい

Posted at

背景

  • CIでビルドしたものを開発メンバーに自動的に配布するようにしたいけど、どれがどのバージョンか区別できないと困る
  • 開発中にどのブランチのいつの次点でビルドされたものかわからなくて困ることがある

やりたいこと

  • CIでビルドした場合、VERSION_NAMEの末尾にビルド番号を入れる
  • ローカルでDebugビルドした場合、VERSION_NAMEの末尾に諸々の情報が入って欲しい

やったこと

次のような記述をbuild.graldeに追加した。

android {
  buildTypes {
    release {
      def buildNumber = System.env.BUILD_NUMBER
      def versionDetail = ((buildNumber != null && !buildNumber.isEmpty()) ? sprintf('(%s)', [buildNumber]) : "")
      resValue "string", "app_version_name_detail", defaultConfig.versionName + versionDetail
    }
    debug {
      def buildNumber = System.env.BUILD_NUMBER
      def versionDetail = ((buildNumber != null && !buildNumber.isEmpty()) ? sprintf('(%s)', [buildNumber]) : sprintf("(develop,%s,%s,g%s)", getDate(), gitBranch(), gitHash()))
      resValue "string", "app_version_name_detail", defaultConfig.versionName + versionDetail
    }
  }
  def gitBranch() {
    def result = ""
    def proc = "git rev-parse --abbrev-ref HEAD".execute()
    proc.in.eachLine { line -> result = line }
    proc.err.eachLine { line -> println line }
    proc.waitFor()
    result
  }

  def gitHash() {
    def result = ""
    def proc = "git rev-parse HEAD".execute()
    proc.in.eachLine { line -> result = line }
    proc.err.eachLine { line -> println line }
    proc.waitFor()
    result
  }

  def getDate() {
    new Date().format('yyyyMMddHHmmss')
  }
}

こうすると、R.string.app_version_name_detailを使うと取得できるようになる。

余談

versionNameSuffixを使う手もあるけど、それをするとBuildConfig.VERSION_NAMEにも付加されてしまい、
運用的にログに乗っかってしまうとマズイのでR.string.app_version_name_detailに分けて定義するようにした。

3
4
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
4