众所周知,android的manifest文件前几行就会有两个属性VersionCode和VersionName。

VersionCode只能输入整形,而VersionName就随意了。

比如下面这样

 android:versionCode="6"
 android:versionName= "1.6.0"


上面是比较正常的,再看下面这个不正常的。。。。

android:versionCode="6"

 android:versionName= "两只老虎,两只老虎" 

是的,你没有看错!!!versionName就是这么随意。。。。想怎么写就怎么写。

ok,下面来看一下code和name的区别。这个结论是从别的地方搬过来的

Google为APK定义了两个关于版本属性:VersionCode和VersionName,他们有不同的用途。
  • VersionCode:对消费者不可见,仅用于应用市场、程序内部识别版本,判断新旧等用途。
  • VersionName:展示给消费者,消费者会通过它认知自己安装的版本

好了,结论很清晰了,我来总结下我自己的体会。

1.不同版本的VersionCode一定要不一样,否则应用市场不会让你通过审核。目测,各种应用市场都是通过VersionCode来判断是否提醒用户更新的。

2.VersionName真的是随意么?其实不然,这是一个方便理解的标识。1.2.0明显比1.1.1的版本要新。而我们普通人也习惯了这种记录版本的方式。

当然 你说 版本120比版本111要新 也ok。但是每次更新版本versionCode都要加1.那么到最后 VersionCode将是一个非常庞大,难以记忆,并且没有什么实际意义的数字。。。。

想象一下,QQ发布最新 版本V1314159261237912636。。。。。好吧。。太可怕了。。。。。

3.在实际的工作中,可能实际的开发人员,打包发布人员,后台管理人员 都是不同的人 甚至可能在不同的地方工作。

ok,问题来了。。。我们作为开发很清楚的知道当前的versionCode是什么,但是对于做运营的哥们,做后台管理的哥们来说,这可就不一定了。

而一般来说 APK上线之前都争分夺秒,大多是昏昏沉沉的加班到凌晨(至于你是不是,我反正是。。。)这就难免上传的哥们手滑了一下,后台运营的哥们在改数据库中的当前版本号时不小心输错了。。。

聚个栗子,最新版本code是 81,目前市场上code是80.我特么手滑了一下 我code写成了71。那么用户就不会收到来自市场的更新提示了。。。

ok如果单纯的去比较versionCode的大小就不太安全了,并且apk一旦传到市场,你再想去改code那就只能再来一版新的。这就会出现相同版本的apk拥有不同的code


好吧,其实我想说的,考虑到运营人员和后台管理人员可能对版本不熟悉,可能会出现误操作。我用的versionName做比较。

当name符合我们的版本号的标准格式时,转为int,挨个比较大小。

当name不符合我们的版本号标准格式时,认为是无效版本号,忽略之。就是这样。。。。。

(好像除了比VerisonCode意义更明显也没什么改变。。。哎。。)


最后友情附上从manifest读取versionName的代码。。

PackageManager pm = context.getPackageManager();PackageInfo pi;String versionName = "";try {pi = pm.getPackageInfo(context.getPackageName(), 0);versionName = pi.versionName;} catch (NameNotFoundException e) {e.printStackTrace();}


更多相关文章

  1. 一个提供Android各历史版本在线源码的网址
  2. Akita 一套Android快速开发库 发布1.2版本
  3. Android Studio 中编译JDK 版本配置
  4. Android 获取imei号码,获取手机型号和系统版本号等信息
  5. Android API Level对应Android版本一览表(10.0)
  6. Android 获取版本号
  7. Android版本名称、版本号、API level对应关系
  8. Android版本与Linux内核版本的关系
  9. android NDK 各个版本下载地址

随机推荐

  1. Failed to extract native libraries, re
  2. Android(安卓)5.0 Binder编译问题及解决
  3. StevGuo系列文章翻译之Android中的输入事
  4. 时间戳和日期之间的转换
  5. Android(安卓)学习记录
  6. Android(安卓)Material Design 中的Corrd
  7. Android(安卓)动画之属性动画ObjectAnima
  8. RadioGroup没有文字只显示图片,图片居中问
  9. android自定义View、ViewGroup
  10. android分包原理--MultiDex