背景
- 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に分けて定義するようにした。