直接上配置文件
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分开运行,一种是修改添加标签的规则避免时间冲突,有谁发现更好的方法可以分享一下 ^_^