Android自定义apk名称、版本号自增

自定义apk名称

默认情况下,gradle会打包一个app-release.apk文件,但是在实际应用中没啥用,gradle支持根据需求自定义apk文件名称
设置应用名称在module根目录的build.gradle文件中的这个位置

applicationVariants.all { variant ->
        variant.outputs.each { output ->
            ......
            //setting apk name to what you want
            output.outputFile = new File(output.outputFile.parent, "luffy" + "-v" +
                    defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk");
        }
    }

如上的代码会第一次打包会生成一个 luffy-v1.0-1.apk的文件

apk文件的名称是由new File(P1, P2),这个对象的P2参数决定的,上面的例子中,配置了 luffy+ versionName+versionCode,得到相应的文件名

还可以根据你的需求添加其他的信息,比如时间

// 获取当前系统时间
def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
// 获取程序名称
def getProductName(){    return "gradlesample"}

android{
    ......
}

标签外,定义函数获取时间和项目名称,用于命名


// 获取当前系统时间
def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) }
// 获取程序名称
def getProductName(){    return "gradlesample"}
android {
    ......

    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
        .....
            //setting apk name to what you want
            output.outputFile = new File(output.outputFile.parent, defaultConfig.applicationId + "-" + buildType.name + "-v" +
                    defaultConfig.versionName + "-" + defaultConfig.versionCode + releaseTime() + "-" + getProductName() + "-" + ".apk");
        }
    }
}

得到com.gradlesample-release-v1.0-32017-09-12-gradlesample-.apk,加上了时间和项目名称

版本号自增

1、 在module的根目录下新建version.properties文件

内容:VERSION_CODE=1

2、 获取本次打包应该使用的版本号


/**
 * auto increase apk versioncode,and return versioncode
 * @return
 */
def getVersionCode() {
    def versionFile = file('version.properties')
    if (versionFile.canRead()) {
        def Properties versionProps = new Properties()
        versionProps.load(new FileInputStream(versionFile))
        def versionCode = versionProps['VERSION_CODE'].toInteger()
        def runTasks = gradle.startParameter.taskNames        //仅在assembleRelease任务是增加版本号
        if ('assembleRelease' in runTasks) {
            versionProps['VERSION_CODE'] = (++versionCode).toString()
            versionProps.store(versionFile.newWriter(), null)
        }
        return versionCode
    } else {
        throw new GradleException("Could not find version.properties!")
    }
}

原理就是,每次打包时去 version.properties文件中去读取记录下的versionCode,然后在原来的基础上+1,并覆盖原来的记录,然后返回+1后的versionCode
3、 设置defaultConfig中的versionCode


    def currentVersionCode = getVersionCode()

    defaultConfig {
        ......
        versionCode currentVersionCode
        ......
    }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

石小泉

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值