AndroidStudio3.2版本自定義apk名稱編譯異常問題
阿新 • • 發佈:2018-12-14
專案從3.x版本升級到3.2版本時原有的自定義輸出apk名稱的程式碼已經失效新的寫法更改為
//這段指令碼是寫在專案級別的gradle檔案中的 // AS3.2版本//輸出apk自定義名稱 android { applicationVariants.all { variant -> variant.outputs.each { output -> output.versionCodeOverride = rootProject.gitVersionCode() output.versionNameOverride = rootProject.gitVersionTag() if (variant.name.endsWith("Debug")) { //debug包使用git自動的版本號 output.outputFileName = "$applicationId _v${variant.mergedFlavor.versionName}_${debugTime()}_debug.apk" } else { //release包使用git自動的版本號和版本名稱 output.outputFileName = "$applicationId _v${variant.mergedFlavor.versionName}_code${variant.mergedFlavor.versionCode}_${releaseTime()}_release.apk" } } } }
- 其中的rootProject.gitVersionCode()和rootProject.gitVersionTag()方法,是為了結合git自動的生成版本號和版本名稱.而它是在專案級別的gradle檔案中申明的(最外層宣告)相關程式碼如下
def gitVersionCode() { // def cmd = 'git rev-list --all-match --first-parent --count' def cmd = 'git rev-list HEAD --count' cmd.execute().text.trim().toInteger() } def gitVersionTag() { def cmd = 'git describe --tags' def version = cmd.execute().text.trim() def pattern = "-(\\d+)-g" def matcher = version =~ pattern if (matcher) { version = version.substring(0, matcher.start()) + "." + matcher[0][1] } else { // version = version + ".0" } return version }
此處僅為程式碼片段,具體如何結合git自動生成版本號和版本名稱,請自行查閱(此處有坑,不同版本的AndroidStudio配置方法不同)
2.debugTime()方法和releaseTime()方法是在指令碼的頂部宣告的方法如下
static def releaseTime() { return new Date().format("yyyy-MM-dd-HH-mm", TimeZone.getDefault())//包含時分秒 } static def debugTime() { // return new Date().format("yyyy-MM-dd", TimeZone.getDefault()) return new Date().format("yyyy", TimeZone.getDefault()) }
原有的自定義apk名稱寫法為,具體示意見上述3.2版本
//AS3.x版本//輸出apk自定義名稱
android.applicationVariants.all { variant ->
variant.outputs.all {
variant.mergedFlavor.versionCode = rootProject.gitVersionCode()
variant.mergedFlavor.versionName = rootProject.gitVersionTag()
if (variant.name.endsWith("Debug")) {
//debug包使用git自動的版本號
outputFileName = "$applicationId _v${variant.mergedFlavor.versionName}_${debugTime()}_debug.apk"
} else {
//release包使用git自動的版本號和版本名稱
outputFileName = "$applicationId _v${variant.mergedFlavor.versionName}_code${variant.mergedFlavor.versionCode}_${releaseTime()}_release.apk"
}
}
}