Groovy动态配置versionCode

该文介绍如何在Android项目的build.gradle(:app)文件中,根据versionName动态设置versionCode。versionName遵循A.B.C格式,versionCode转换规则为A两位、B两位、C两位。通过读取appversion.properties文件中的versionName属性,然后在构建过程中计算出versionCode。提供了相关代码示例来实现这一功能。
摘要由CSDN通过智能技术生成

实现功能:在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
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KillerNoBlood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值