版本控制—使用Gradle自动管理应用程序版本
2015-11-07 13:10
429 查看
我们在开发App时,通常在项目的Release阶段我们需要设置应用的版本号和版本名称,也就是设置下面两个属性
versionCode
versionName
versionName的值是String类型,它就是版本的名称,通常叫做版本号,是提供给用户看的,以便供用户知道当前自己安装的是哪个版本的app,一般在app的设置界面和应用市场上我们看到的版本号就是这个
它的versionCode为11246,现在已经非常大了,通常我们手动去记住这个versionCode和对应的versionName比较容易出错,而且随后期迭代的非常多的时候,这时候非常混乱,而versionCode(Name)出错则会导致不可预料的后果:
1、新Release的应用versionCode比旧版的versionCode小,导致app升不了级,新Release的应用使用了同一个的versionName,导致用户不升级
2、手动管理的话,假如其中一个工程师一不小心把下一代app的versionCode误写成了12246,而再下一版的是另外一个工程师发布的,如果versionCode还是按最开始的自增,那么versionCode为11248,当应用发布出去,包括所有versionCode小于12247的应用用户将都升不了级,唯一的办法就是把今后迭代的app的versionCode从12246以后开始自增
我们在Module目录下新建一个version.properties文件作为存储versionCode文件,里面我们给它一个初始值为
VERSION_CODE=1
然后在Module目录下的gradle配置这样一段代码:
那么当我们release这个项目时候,每release一次这个versionCode将会自动加1,如下我release了一次,它自动加了1
通过gradle自动管理versionCode,我们无需手动修改这个versionCode了,只需要在release时候把版本号versionName更新即可
versionCode
versionName
版本号
其中versionCode的值是int类型,主要作用就是作为应用内部的版本编号,为版本升级提供唯一的标识,通常设为是自增的,假如当前app的versionCode为1,下一代app的versionCode为2,那么就可以通过它来判断应用是否需要升级、是否有新版本,也就是versionCode的值越大那么app就越新。它通常是对用户不可见的,因为它只是一个int类型值,显示出来无任何意义versionName的值是String类型,它就是版本的名称,通常叫做版本号,是提供给用户看的,以便供用户知道当前自己安装的是哪个版本的app,一般在app的设置界面和应用市场上我们看到的版本号就是这个
手动管理产生的问题
假设当前版本是这样的:defaultConfig { applicationId "com.sunzxy.sunzxyongdemo" minSdkVersion 16 targetSdkVersion 23 versionCode 11246 versionName "6.0.1" }
它的versionCode为11246,现在已经非常大了,通常我们手动去记住这个versionCode和对应的versionName比较容易出错,而且随后期迭代的非常多的时候,这时候非常混乱,而versionCode(Name)出错则会导致不可预料的后果:
1、新Release的应用versionCode比旧版的versionCode小,导致app升不了级,新Release的应用使用了同一个的versionName,导致用户不升级
2、手动管理的话,假如其中一个工程师一不小心把下一代app的versionCode误写成了12246,而再下一版的是另外一个工程师发布的,如果versionCode还是按最开始的自增,那么versionCode为11248,当应用发布出去,包括所有versionCode小于12247的应用用户将都升不了级,唯一的办法就是把今后迭代的app的versionCode从12246以后开始自增
通过gradle自动管理应用程序版本
上面我们说了采用人工的方式去管理应用的版本是比较容易出错的,所以既然手动管理不行,那么就采取自动管理的方式去管理吧,而versionCode的作用就是提供一个int类型的版本标识供应用升级,而每一次release的时候这个versionCode都应该确保比旧版本的值大,所以可以通过在release时候让versionCode自动+1来确保这个版本是最新的版本,而这个工作则是由gradle来完成的。我们在Module目录下新建一个version.properties文件作为存储versionCode文件,里面我们给它一个初始值为
VERSION_CODE=1
然后在Module目录下的gradle配置这样一段代码:
def versionPropsFile = file("version.properties") if (versionPropsFile.canRead()) { Properties versionProps = new Properties() versionProps.load(new FileInputStream(versionPropsFile)) def runTasks = gradle.startParameter.taskNames def int verCode = versionProps['VERSION_CODE'].toInteger() if (':app:assembleRelease' in runTasks) { versionProps['VERSION_CODE'] = (verCode + 1).toString() versionProps.store(versionPropsFile.newWriter(), null) } defaultConfig { applicationId "com.sunzxy.sunzxyongdemo2" minSdkVersion 16 targetSdkVersion 23 versionCode verCode versionName "1.2" } } else { throw new GradleException("Could not read version.properties!") }
那么当我们release这个项目时候,每release一次这个versionCode将会自动加1,如下我release了一次,它自动加了1
通过gradle自动管理versionCode,我们无需手动修改这个versionCode了,只需要在release时候把版本号versionName更新即可
相关文章推荐
- SourceProvider.getJniDirectories
- 执行失败的任务 ': processDebugManifest'
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- 【DevOps】为什么我们永远疲于奔命?
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- 网络管理之IP地址篇
- 文件的读出 编辑 管理
- 路由器访问列表的应用
- xDSL技术及其应用
- 基于XML的桌面应用
- SQL Server 2008 R2 应用及多服务器管理
- 简单谈谈node.js 版本控制 nvm和 n
- Android Studio使用教程(六):Gradle多渠道打包
- VC下通过系统快照实现进程管理的方法
- ExtJS 2.0实用简明教程之应用ExtJS
- 使用jQuery管理选择结果