以前、Gradleでbuild.gradleを修正して、Androidのapkファイルにアプリの名前が入るように変更したけど、Gitのリビジョン ハッシュとかも付けたくなった。
wannabe-jellyfish.hatenablog.com
あとコミットされてないコードがあるかないかも知りたかったので、その備忘録
Gitのリビジョンにも対応したbuild.gradleがこちら
apply plugin: 'com.android.application' apply plugin: 'me.tatarka.retrolambda' android { (略) android.applicationVariants.all { variant -> if (variant.buildType.name.equals("release")) { def revisionHash = ["sh", "-c", "cd ${project.rootDir} ; git rev-parse --short HEAD"].execute().in.text.trim() def modify = ["sh", "-c", "cd ${project.rootDir} ; git status --short"].execute().in.text.trim().empty ? "" : "+" variant.outputs.each { output -> def newName = "${applicationId}_v${versionName}_r${revisionHash}${modify}_${variant.productFlavors.name.get(0)}.apk" output.outputFile = new File(output.outputFile.parent, newName) } } } }
この例だと、コミットされてない変更がない場合は
<アプリケーションID>v<バージョン名>r<リビジョンハッシュ>_<フレーバー名>.apk
コミットされてない変更がある場合は
<アプリケーションID>v<バージョン名>r<リビジョンハッシュ>+_<フレーバー名>.apk
という感じに+がつく感じになる
revision hashの取得
def revisionHash = ["sh", "-c", "cd ${project.rootDir} ; git rev-parse --short HEAD"].execute().in.text.trim()
Qiitaのgfx様のとおりです!
コミットされてない変更の有無の取得
def modify = ["sh", "-c", "cd ${project.rootDir} ; git status --short"].execute().in.text.trim().empty ? "" : "+"
同じ要領でgitコマンドのgit status --short
を実行して、結果が空でなければ、+がつくように改変
BuildConfigでも利用したい場合
上の場合だと、apkファイル名にしかリビジョン番号がつかないので、アプリ内で利用できるBuildConfig
では使えない。。。
その場合は、defaultConfig
につくようにすればいいっぽい。
def getVersionName = { -> def baseVersionName = "1.0" def revisionHash = ["sh", "-c", "cd ${project.rootDir} ; git rev-parse --short HEAD"].execute().in.text.trim() def modify = ["sh", "-c", "cd ${project.rootDir} ; git status --short"].execute().in.text.trim().empty ? "" : "+" return "${baseVersionName}_${revisionHash}${modify}" } android { defaultConfig { versionCode 1 versionName getVersionName() } }
getVersionName()
関数を作って、その中でgitコマンドを実行する感じ
以上!!