查看当前 gradle 版本
当前的 gradle 版本号为:3.4.2(低版本的语法不同,可能编译不过)
在项目文件夹的 build.gradle 文件中可以查到
现在要做两件事
- 可以在代码中获取编译时间
- 打包后自动修改文件名,添加版本号和编译时间
gradle 用的就是 groovy 的语法,所以不懂的,可以去查一下 groovy 的基本用法
代码中获取编译时间
在模块的 build.gradle 中
import java.text.SimpleDateFormat
android {
defaultConfig {
//获取编译时间(这里声明了一个BUILD_TIME的变量,groovy 加不加括号和结尾的封号都无所谓)
buildConfigField("String", "BUILD_TIME", getBuildTime())
//buildConfigField "String", "BUILD_TIME", getBuildTime()
}
}
/**
* 获取编译时间
*/
String getBuildTime() {
Date date = new Date();
//中国用的是东八区时间,数值上是在UTC时间上加8
//String dateStr = "\"" + date.format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("UTC")) + "\"";
String dateStr = "\"" + date.format("yyyy-MM-dd HH:mm:ss") + "\"";
return dateStr;
}
配置好 gradle 并刷新之后,该变量就会自动被添加到 BuildConfig 类中去了 BuildConfig.BUILD_TIME
打包后自动修改文件名,添加版本号和编译时间
groovy的语法和java很像,只是函数有点差别,比如 java 有 lastIndexOf 从末尾开始遍历来获取文件后缀,而groovy则没有该函数,只能通过 indexOf 或者 split 来获取后缀
android {
//release版本输出包名自动追加版本号和版本名称 appName-release_v1.2.1_20191030.apk
applicationVariants.all { variant ->
variant.outputs.all { output ->
//只处理release版本
//if(buildType.name == 'release') {
//if(buildType.name.equals('release')) {
def createTime = new Date().format("YYYYMMdd", TimeZone.getTimeZone("GMT+08:00"))
//output.outputFile是appName-release.apk
def name = output.outputFile.name, ext = "";
//返回-1表示没找到
def dotIndex = name.indexOf(".")
if(dotIndex != -1) {
ext = name.substring(dotIndex);
name = name.substring(0, dotIndex)
}
outputFileName = name + "_v" + defaultConfig.versionName + "_" + createTime + ext;
//}
}
}
}