gradle的学习:https://juejin.im/post/5d74de99e51d4561d41d2e6d
在APP Gradle添加SVN版本号的操作,首先就是window可以使用svn命令,这就需要安装svn的时候安装命令如下图所示:
这个是必须的;
def version = getDate() + svninfo()//时间与svn版本号。最后的结果例如:"0709.17443"
def code = svninfo().toInteger() //可以用于versionCode
defaultConfig {
applicationId "com.shunwang.cloud"
minSdkVersion 19
targetSdkVersion 29
versionCode 8
versionName version
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField "String", "BUILD_TIME", getDate1() //获取事件字符串
buildConfigField "Integer", "DEFAULT_CODE", svninfo() //写一个int类型17471
buildConfigField "Integer", "DEFAULT_PORT", '5000' //写一个int类型17471
}
可以看到versionName的定义version是由两个方法实现的,一个是获取日期,一个是获取svn版本号:
String getDate() {//获取日期,例如: 0709.
Date date = new Date();
String datestr = date.format("MMdd.", TimeZone.getTimeZone("UTC")) ;
return datestr;
}
String getDate1() {//获取日期,例如: 202007090909
Date date = new Date();
String datestr = "\""+ date.format("yyyyMMddHHmm", TimeZone.getTimeZone("UTC")) + "\"" ;
return datestr;
}
def svnversion() {//通过svnversion命令获取svn版本信息,一般为例如17433:17443M因此可能需要截取
description 'Get SVN revision number.'
new ByteArrayOutputStream().withStream { os ->
def result = exec {
executable = 'svnversion'
standardOutput = os
}
ext.revid = os.toString().substring(0,5)
}
}
def svninfo(){//通过命令svn info获取,需要截取Last Changed Rev:对应的版本这个与svnlog一致
new ByteArrayOutputStream().withStream { os ->
def result = exec {
executable = 'svn'
args = ['info']
standardOutput = os
}
def outputAsString = os.toString()
def matchLastChangedRev = outputAsString =~ /Last Changed Rev: (\d+)/
def svnNm = "${matchLastChangedRev[0][1]} "
def size = svnNm.toString().size()
return svnNm.toString().substring((size-6),(size-1))
}
这时预编译的结果是:
//BuildConfig.java
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example.cloud";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 8;
public static final String VERSION_NAME = "0708.17471";
// Fields from default config.
public static final Integer DEFAULT_CODE = 17471;
public static final Integer DEFAULT_PORT = 5000;
}
在使用的时候:
public final String versionName = BuildConfig.VERSION_NAME;//版本号
public final String systemVersion = Build.VERSION.INCREMENTAL;//系统版本号
public final String buildTime= BuildConfig.BUILD_TIME;//编译的时间戳