您的位置:首页 > 移动开发 > Android开发

android中的VersionCode和VersionName到底有什么区别

2014-04-21 16:54 363 查看
众所周知,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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: