SDK设计心得之版本号

任何一个产品都有版本,而作为SDK来说,版本会更加重要。游戏会根据你的版本来选择接入的功能,我们定位问题也需要追踪回朔版本号,进而定位代码SVN版本。而区分这些版本的方法就是版本号。

我们的版本号

目前我们的版本只有字符版本,没有数字版本。当有比对版本的需要的时候,我们会把字符版本转化为数字版本号。例如把2.0.0a转化为200,然后用这个数字对比。其实这样是有问题的,1.3系列我们出到了1.3.11a。将来如果有13.1.1a。两个的数字版本号就是1311,会有问题。但是如果我们版本都13.1.1a,还有人用1.3.11a。其实他的版本早就应该更新了。

对于具体的版本,为了方便定位问题,除了对外的版本号,我们还有对内的基线号,或者tag标签。Tag标签(基线号)主要是用来精确定位版本对应的svn记录。我们的tag(基线号)是由Tag_版本号.持续集成build号_SVN版本号组成。例如:Tag_2.7.2.246_55349,我们在持续集成时会按照这个值生成一份svn的tag。定位问题的时候,直接按照tag回朔即可。

需要几个版本号

这里其实我目前也没有想到比较好的解决办法。建议版本号参考Android标准,有两个,一个数字版本号,用于SDK内部,方便比对版本的时候使用。一个是字符版本号,用于标识版本,提供给外部应用调用。

关于字符版本号

目前的主流版本号都是分三段:主版本、特性版本、修正版本。例如:2.0.1这种。主版本号主要用于大版本的发布,特性版本主要用于更新迭代,修正版本号主要用于bug修复。

关于数字版本号

关于数字版本号,可以自己来直接维护,也可以通过一定的规则来生成。如果是自己维护,像SDK存在多个分支同时维护的情况下,维护起来就会很复杂,问题很多。这里给一个个人觉得可行的方法吧。数字版本号由字符版本号生成,同时建议字符版本号中的修正版本号用两位位来围护,例如2.0.00a;或者2.0.01a这种。对应的转化出的数字版本号为2000和2001。

版本号放在哪里

这里还是直接写经验吧:

首先:

  • 代码里面手动写一个。这个用于开发标示和了解当前的版本号。为了防止开发发版本忘了改版本号,建议增加到版本提测的checkList点击查看里面。
  • 自动构建打一个。我们在自动构建时,会通过构建脚本生成一个版本配置相关的文件,在这个文件里面,我们会打上一些对于我们后续定位问题有需要的内容。其中就包括版本号。具体的配置文件事例如下:
  • VERSION=1.3.1
  • SVN_REVISION=55384
  • BASE_LINE=Tag_AGSDK_1.3.1.304_55384
  • DATETIME=2015-04-29 12:23:56.279
  • 应用启动时,进行版本对比,二次确认。虽然我们不想,但是总会有可能出现版本号的错误或者不一致。所以我们在应用启动的时候会比对上面的两个版本号。当版本号不一致时,我们会生成对应的错误日志。最终通过多重方式确保生成一个安全的,可用的版本号。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pythonista

python模块和包

一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀。

22210
来自专栏Petrichor的专栏

pycharm: 跳转 & 回退

26820
来自专栏专注数据中心高性能网络技术研发

Find命令-Linux系统搜索利器

1.Motivation ---- 搜索查找是管理文件系统常用的操作,虽然动作逻辑本质上是匹配,很简单,但搜索也有很多种花样,可以用来加速搜索,快速提取想要的内...

31550
来自专栏友弟技术工作室

命令行提高用户体验的神器

去闯 ag 比grep,ack更快的递归搜索文件内容 ag,grep,ack性能对比的链接 ag安装 ag ag简单使用 ag tig tig:字符模式下交互...

35590
来自专栏大眼瞪小眼

程序与进程

昨天复习《深入理解计算机系统》,参考了小土刀的博客,看到了进程和程序在内存中是如何组织的,虽然这张图看了很多遍但是总感觉有疑问。努力解决,参考《深入理解计算机系...

10230
来自专栏风中追风

volatile和synchronized 实现原理的差别

提到volatile 和 synchronized 的时候不得不提到的一个东西就是JMM(java Memory Model)java内存模型。

1K90
来自专栏菩提树下的杨过

maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项

一、指定编译文件的编码 maven-compile-plugin 1 <plugin> 2 <gr...

27260
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用RVM安装Ruby on Rails

Ruby on Rails是一个流行的Web应用程序框架,旨在帮助您开发成功的项目,同时编写更少的代码。为了使Web开发变得有趣并且受到强大社区的支持,Ruby...

64900
来自专栏黑泽君的专栏

用gcc编译c语言程序以及其编译过程

对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!!

17010
来自专栏Kubernetes

docker volume源码分析

这是在docker v1.10.3版本的使用过程中,使用convoy 作为volume driver,在一次docker volume remove失败时,使我...

43560

扫码关注云+社区

领取腾讯云代金券