Android 配置gradle实现VersionCode自增实例
作者:Ikulm 发布时间:2021-07-03 12:39:23
标签:Android,gradle,VersionCode,自增
我是因为构建多渠道包的时候有这个需求,平常工作多个渠道包频繁的打包,总会忘记versioncode提高一下,从而打包出来的apk无法覆盖原先的安装包,这里只介绍了自增VersionCode,网上还有动态设置versionName,有需要也可以看看其他人的实现。
以下介绍下配置Gradle自动增加versionCode的值
一、项目的根目录新建一个文件version.properties
二、文件内容写上初始的versioncode
三、主gradle配置
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 ('assembleInsectRelease' in runTasks) {
versionProps['VERSION_CODE'] = (++versionCode).toString()
versionProps.store(versionFile.newWriter(), null)
}
return versionCode
} else {
throw new GradleException("Could not find version.properties!")
}
}
android {
....
}
只在release模式下才自增,保证测试的时候versionCode不增加
四、调用
def currentVersionCode = getVersionCode()
defaultConfig {
applicationId 'com.chongzzz.texas'
minSdkVersion 15
targetSdkVersion 25
multiDexEnabled true
versionCode currentVersionCode
versionName "1.0.1.21"
}
补充知识:Android 动态替换 Manifest.xml中的值
根据情况替换 Manifest.xml 中的值
android 中有很多个渠道,每个渠道都有 debug 和 release 版本, 如果Manifest.xml 中每个版本有不同的值
一般的可以用 manifestPlaceholders = [APP_KEY : '对应的值'] 来替换,在 debug和 release 的时候也可以,但是多渠道的时候可能就会有些问题了
解决方式
1、简单
两个渠道
flavorDimensions 'defaultDimension'
productFlavors {
alibaba { }
tencent { }
}
每个渠道的版本的不同的值
ext {
alibabaDebug = 'alibabaDebug'
alibabaRelease = 'alibabaRelease'
tencentDebug = 'tencentDebug'
tencentRelease = 'tencentRelease'
}
替换值
afterEvaluate {
project.android.applicationVariants.all { variant ->
// 最简单的方法
variant.mergedFlavor.manifestPlaceholders = [APP_KEY: project."${variant.name}"]
}
}
2、自定义任务,和上面的其实差不多
两个渠道
flavorDimensions 'defaultDimension'
productFlavors {
alibaba { }
tencent { }
}
每个渠道的版本的不同的值
ext {
alibabaDebug = 'alibabaDebug'
alibabaRelease = 'alibabaRelease'
tencentDebug = 'tencentDebug'
tencentRelease = 'tencentRelease'
}
替换值
afterEvaluate {
project.android.applicationVariants.all { variant ->
// 自定义任务
tasks.create("${variant.name}ManifestPlaceHolder", ManifestPlaceHolder) {
current = variant
}
variant.outputs.first().processManifest.dependsOn "${variant.name}ManifestPlaceHolder" }
}
class ManifestPlaceHolder extends DefaultTask {
@Input
def current
@TaskAction
def changeManifestPlaceHolder() {
current.mergedFlavor.manifestPlaceholders = [APP_KEY: project."${current.name}"]
}
}
来源:https://blog.csdn.net/Ikulm/article/details/79312174


猜你喜欢
- 手把手教你用C#开发Android应用程序的方法和流程摘要:用C#能开发RFID-android吗?C#真的能开发android程序吗?C#
- 右击有main方法的类===> Run as===> Run Configurations ===>双击java
- 导语如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是Android的RadioButton是一般是放在Rad
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- Java获取文件的类型和扩展名实现代码:File file=new File("E:\\aa.jpg"); String
- 一、先看结果1.1创造营2020撑腰榜前三甲创造营2020撑腰榜前三名分别是 希林娜依·高、陈卓璇 、郑乃馨>>>df1[
- Looper是什么用于为线程运行消息循环的类。默认情况下,线程没有与之关联的消息循环。要创建一个,在要运行循环的线程中调用 prepare(
- 在学习MyBatis过程中想实现模糊查询,可惜失败了。后来上百度上查了一下,算是解决了。记录一下MyBatis实现模糊查询的几种方式。 数据
- Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的
- 本文实例讲述了C#获取路径的几种方式。分享给大家供大家参考。具体如下:string str1 =Process.GetCurrentProc
- 本文实例为大家分享了Unity实现俄罗斯方块的具体代码,供大家参考,具体内容如下一、使用SpriteRenderer作为小方块图片,创建7种
- Java中 获取指定字符串在另一个字符串中出现的次数,供大家参考,具体内容如下/** * @param args */ public s
- 前沿页面通用Loading组件是一个App必不可少的基础功能,之前只开发过Android原生的页面Loading,这次就按原生的逻辑再开发一
- 冒泡排序在八大排序中,冒泡排序是最为出名的排序算法之一!冒泡排序的代码还是相当简单的,两层循环,外层是冒泡轮数,里层是依次比较,这个算法的时
- Nacos获取不到配置的值namespace设计真实一个奇特的东西。用spring-cloud-starter-alibaba-nacos-
- 1.多节点无缝切换问题分布式节点中的服务宕机或者重启不影响客户端使用分布式节点中的服务宕机重启不影响业务服务内部通信如果在某个分布式系统中想
- 发现问题肯定有人发现连接mysql失败,然后又找不到问题所在,又出现一大最报错,如下图。解决过程 1.先查询自己的java版本,在
- 微信对话列表滑动删除效果很不错的,借鉴了github上SwipeListView(项目地址:https://github.com/likeb
- 二叉树是一种非常重要的数据结构。本文总结了二叉树的常见操作:二叉树的构建,查找,删除,二叉树的遍历(包括前序遍历、中序遍历、后序遍历、层次遍
- 如下所示: static void Main()&nbs