Android编译gradle 动态修改版本号
Posted xjz729827161
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android编译gradle 动态修改版本号相关的知识,希望对你有一定的参考价值。
在构建代码的时候不想每次都修改版本号,需能够增加一个功能在特定的条件下动态的修改版本号
- 在manifest里面加入占位符号
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="$versioncode"
android:versionName="$versionname">
- 修改build.gradle
import com.google.gson.Gson
class Version
int versionCode
String versionName
def versionJsonFile = file('./version.json')//这个文件最好放一个所有项目人员都能够访问的地方
def versionJsonObject = new Gson().fromJson(versionJsonFile.text, Version.class)
android.applicationVariants.all
variant ->
println("variants name : " + variant.name)
//只有满足特定条件的情况下才会版本自增一,这个可以看看各个项目的特定配置
if (variant.name.toLowerCase().contains("ceshirelease") )
println("variants name : versionCode " + versionJsonObject.versionCode + "versionname: " + versionJsonObject.versionName)
versionJsonObject.versionCode = versionJsonObject.versionCode + 1
int lastIndexPoint = versionJsonObject.versionName.lastIndexOf(".")
String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint)
println("newStr" + newStr)
versionJsonObject.versionName = newStr + "." + versionJsonObject.versionCode
println("versonJsonStr.versionName " + versionJsonObject.versionName)
//这句是核心,可以调整版本号和版本明,修改了这个会影响到BuildConfig.class里面的属性
variant.mergedFlavor.versionCode = versionJsonObject.versionCode
variant.mergedFlavor.versionName = versionJsonObject.versionName
//如果没有加下面这句,当应用安装后会出现应用信息没有版本号的问题,这个必须有
variant.mergedFlavor.manifestPlaceholders.put("versioncode", versionJsonObject.versionCode)
variant.mergedFlavor.manifestPlaceholders.put("versionname", versionJsonObject.versionName)
//为了记住最新的版本号,是需要进行文件的回写的,什么时候回写会好一点
//个人认为只有当打包apk的动作执行成功后 回写文件记录的版本号最优
afterEvaluate
project ->
gradle.taskGraph.afterTask
task, taskState ->
//这里如果assembleceshirelease 就具体的打包的变种项目,各个应用肯定不一样,需要调整下
if (task.name.toLowerCase().contains("assembleceshirelease") && taskState.getFailure() == null)
println("try assemble ceshi release" )
//回写文件操作
versionJsonFile.withPrintWriter out ->
out.println(new Gson().toJson(versionJsonObject))
给apk重新命名也是同样的道理
variant.getOutputs().all
File file = it.outputFile;
println(" file property file.canRead() " + file.canRead() + " file.canWrite " + file.canWrite())
String pathString = file.getPath();
println(" path String : " + pathString + " File.pathSeparator: " + File.separator)
//指定最终输出的文件的目录和名字
pathString = file.getParent() + File.separator + "test.apk";
println(" path pathString : " + pathString)
file.renameTo(pathString)
以上是关于Android编译gradle 动态修改版本号的主要内容,如果未能解决你的问题,请参考以下文章
使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值