实现功能:在build.gradle(:app)中,代码实现versionCode根据versionName动态更改
规定versionName格式为A.B.C,比如1.2.1
versionCode基于VersionName来定,比如010201。
● A 2位数(首位0可隐藏不写)
● B 2位数(如只有1位,左补位0)
● C 2位数(如只有1位,左补位0)
1.0.0 ==> 010000(首位0可隐藏不写)10000
* 3.1.5 ==> 30105
* 3.1.23 ==> 30123
* 3.21.6 ==> 32160
* 10.2.3 ==> 100203
* 10.13.36 ==> 101336
最大为: * 99.99.99 ==> 999999
1、在与build.gradle(:app)同目录新增一个appversion.properties文件
appversion.properties增加versionName属性
2、build.gradle(:app)中代码配置
......
def synchronized getVersionProperty(propName, defValue) {
def file = file("appversion.properties")
def ret = defValue
if (file.exists() && file.canRead()) {
FileInputStream input = new FileInputStream(file)
Properties props = new Properties()
props.load(input)
ret = props.get(propName);
input.close()
}
return ret
}
def getAppVersionName() {
String versionName = getVersionProperty("VERSION_NAME", "3.1.5")
return versionName
}
def getAppVersionCode() {
String versionName = getAppVersionName()
def versions = versionName.split("\\.")
def updateVersionString = ""
for (int i = 0; i < versions.size(); i++) {
def subString = versions[i]
if (i == 0) {
updateVersionString += subString
continue
} else if (i >= 3) {
break
}
def subNumber = Integer.parseInt(subString)
updateVersionString += String.format("%02d", subNumber)
}
return Integer.parseInt(updateVersionString)
}
def appVersionName = getAppVersionName()
def appVersionCode = getAppVersionCode()
android {
......
defaultConfig {
......
versionCode appVersionCode
versionName appVersionName
......
}
}
......
3、代码中获取版本信息
fun getAppVersionName(context: Context?): String {
context?.let { c ->
val info = getCurrentAppPackageInfo(c)
info?.let {
return it.versionName
}
}
return ""
}
fun getAppVersionCode(context: Context?): Int {
context?.let { c ->
val info = getCurrentAppPackageInfo(c)
info?.let {
return it.versionCode
}
}
return 0
}
/**
* 获取当前app包信息对象
*/
fun getCurrentAppPackageInfo(context: Context?): PackageInfo? {
context?.let { c ->
try {
val manager = c.packageManager
val packageName = c.packageName
return manager.getPackageInfo(packageName, 0)
} catch (e: PackageManager.NameNotFoundException) {
uploadTryCatchException(
e,
getClassNameAndMethodName()
)
Log.e(TAG, Log.getStackTraceString(e))
throw RuntimeException(e)
}
}
return null
}