实现Android apk 版本号自动生成和打包批量重命名功能

一、实现版本号自定生成功能

我们发版本供测试组时常以日期命名版本号,为了免除手动更新版本号的麻烦,实现版本号的自动生成:

1.这里在app的build.gradle的根域中定义生成版本号的函数(我这个地方需求比较奇葩,如果是个位数的月份省去前面的0):

def versionTag() {
    def time = new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
    def decoratedTime
    if (time.startsWith("0")) {
        decoratedTime = time.replaceFirst("0", "")
    } else {
        decoratedTime = time
    }
    return "2.0." + decoratedTime
}

2.在android/defaultConfig中引用versionTag()

defaultConfig {
    ...
    versionName versionTag()
}

二、实现打包时APK的批量重命名功能

这里有两种方式:
第一种:
在defaultConfig中定义archivesBaseName
setProperty(“archivesBaseName”, “app_name_version”)
这种方法打包并不会完全自定义包名,例如打release包时生成的apk名为:”app_name_version-rmapk-release.apk”,后面会多加“-rmapk-release”字样,但是这种方法最简单。
第二种:
在buildType中添加代码块:

applicationVariants.all { variant ->
            def file = variant.outputs[0].outputFile
            variant.outputs[0].outputFile = new File(file.parent, file.name.replace("app-rmapk-", "appName_" + defaultConfig.versionName+"_"))
        }

这样可以实现对所有apk的完全自定义的重命名,看官要想有自定义的风格,请在此基础上修改此方法。注意gradle版本,新版本中使用variant.outputs[0].outputFile代替了原来的variant.outputFile

三、完整的核心代码

apply plugin: 'com.android.application'

//生成按日期命名的版本号
def versionTag() {
    def time = new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
    def decoratedTime
    if (time.startsWith("0")) {
        decoratedTime = time.replaceFirst("0", "")
    } else {
        decoratedTime = time
    }
    return "2.0." + decoratedTime
}

android {
    ...
    defaultConfig {
        ...
        versionName versionTag()
//      此方法不能实现完全的自定义命名,但是方法简单
//      setProperty("archivesBaseName", "appName_$versionName")
    }

    buildTypes {

        release {
            ...
        }

        release_log {
            ...
        }

        debug {
            ...
        }

//实现打包的批量重命名功能
        applicationVariants.all { variant ->
            def file = variant.outputs[0].outputFile
            variant.outputs[0].outputFile = new File(file.parent, file.name.replace("app-rmapk-", "appName_" + defaultConfig.versionName+"_"))
        }
    }

参考文档:http://blog.csdn.net/maosidiaoxian/article/details/41349561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值