一、实现版本号自定生成功能
我们发版本供测试组时常以日期命名版本号,为了免除手动更新版本号的麻烦,实现版本号的自动生成:
1.这里在app的build.gradle的根域中定义生成版本号的函数(我这个地方需求比较奇葩,如果是个位数的月份省去前面的0):
def versionTag() {
def time = new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
def decoratedTime
if (time.startsWith("0")) {
decoratedTime = time.replaceFirst("0", "")
} else {
decoratedTime = time
}
return "2.0." + decoratedTime
}
2.在android/defaultConfig中引用versionTag()
defaultConfig {
...
versionName versionTag()
}
二、实现打包时APK的批量重命名功能
这里有两种方式:
第一种:
在defaultConfig中定义archivesBaseName
setProperty(“archivesBaseName”, “app_name_version”)
这种方法打包并不会完全自定义包名,例如打release包时生成的apk名为:”app_name_version-rmapk-release.apk”,后面会多加“-rmapk-release”字样,但是这种方法最简单。
第二种:
在buildType中添加代码块:
applicationVariants.all { variant ->
def file = variant.outputs[0].outputFile
variant.outputs[0].outputFile = new File(file.parent, file.name.replace("app-rmapk-", "appName_" + defaultConfig.versionName+"_"))
}
这样可以实现对所有apk的完全自定义的重命名,看官要想有自定义的风格,请在此基础上修改此方法。注意gradle版本,新版本中使用variant.outputs[0].outputFile代替了原来的variant.outputFile
三、完整的核心代码
apply plugin: 'com.android.application'
//生成按日期命名的版本号
def versionTag() {
def time = new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
def decoratedTime
if (time.startsWith("0")) {
decoratedTime = time.replaceFirst("0", "")
} else {
decoratedTime = time
}
return "2.0." + decoratedTime
}
android {
...
defaultConfig {
...
versionName versionTag()
// 此方法不能实现完全的自定义命名,但是方法简单
// setProperty("archivesBaseName", "appName_$versionName")
}
buildTypes {
release {
...
}
release_log {
...
}
debug {
...
}
//实现打包的批量重命名功能
applicationVariants.all { variant ->
def file = variant.outputs[0].outputFile
variant.outputs[0].outputFile = new File(file.parent, file.name.replace("app-rmapk-", "appName_" + defaultConfig.versionName+"_"))
}
}
参考文档:http://blog.csdn.net/maosidiaoxian/article/details/41349561