Gradle自動設定版本號及修改apk字尾
阿新 • • 發佈:2019-01-01
直接上配置檔案
import java.text.SimpleDateFormat
apply plugin: 'com.android.application'
def verName = "1.0.0"
def buildTime() {
def df = new SimpleDateFormat("yyMMddHHmmss")
df.setTimeZone(TimeZone.getTimeZone("UTC+08:00"))
return df.format(new Date())
}
def apkSuffix() {
def df = new SimpleDateFormat("yyMMdd" )
df.setTimeZone(TimeZone.getTimeZone("UTC+08:00"))
return df.format(new Date())
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.yuchen.yctools"
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "${verName}-beta-build-${buildTime()}"
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('-debug.apk')) {
output.outputFile = new File(outputFile.parent, outputFile.name.replace(".apk" , "-" + defaultConfig.versionName + ".apk"));
outputFile.delete()
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.+'
compile 'com.android.support:design:23.+'
}
在設定VersionName時可以通過gradle動態設定其版本號,這裡使用了時間最為版本號標識,同樣也可以通過配置遞增的數值來實現(需要新建一個*.properties檔案來儲存當前的版本標識)
ps:
在修改apk字尾名時發現當設定版本號時間標識在秒級別時,最初使用defaultConfig.versionName來配置apk字尾,發現執行會提示*.apk does not exist on disk. 原因是在編譯和安裝時呼叫了兩次buildTime(),使得得到的apk路徑不同
在stackoverflow上搜了好多回答也沒有解決,還看到一個帖子的實現是隻在apk字尾處使用時間標籤,而版本號使用另外的規則
output.outputFile = new File(outputFile.parent, outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"));
output.outputFile = new File(outputFile.parent, outputFile.name.replace(".apk", "-" + variant.versionName + ".apk"));
在AnroidStudio上選擇執行會執行build和install,兩者的時間標籤不一致導致無法找到apk檔案
現在一種解決方式是build和install分開執行,一種是修改新增標籤的規則避免時間衝突,有誰發現更好的方法可以分享一下 ^_^