最近在更新几个老项目,在更新的过程中碰到了一些兼容性方面的问题。比如上次的那篇自动更新在安卓7.0机型遇到的坑,本来以为,解决了安装的问题,应该不会再碰到安装的问题了,结果在昨天就碰到了“应用未安装” 的问题,见下图:


由于本项目的一些特殊性,要解决这个问题还有点棘手,但本次主要以解决问题为主。

接下来,说说解决思路,我想一开始大多数人应该看了第一反应就是签名不对,我也是,但是,我签名 debugrelease 用的同一个,事实也证明签名是没有问题的。那第一个思路排除掉了,那有没有可能是因为 versionCode 引起的呢?虽然说,应该不大可能会犯这种错误,但谨慎的我还是查了一遍,也没问题。这就有点奇怪了,因为以前从没遇到过这个问题,一下子也不知道咋整了,权限什么的也都检查过了。那只好求助万能的谷歌了。(对了,在这中间啊,logcat 中有这样一条输出日子)

PackageParser: Unknown element under : meta-data

于是,我先顺着这条线索找了下。比较多人推荐的一条是 stackoverflow 上的解决办法,可惜,这不适合我的问题。貌似这两次碰到的问题,谷歌都没能找到解决方案。那没办法,只能自己一步步摸索了。 前面说了,由于我们项目的特殊性,我们会有一个专门的下载器,然后通过它来下载不同需求划分的APP版本,因此,测试的第一步,就是多试几个不同的APP 看看有没有能安装成功的。没想,还真有能安装成功的,这就有意思了,都是一套代码出去的,咋就有些可以有些不可以呢?于是,很自然的想到了查看代码提交日志,然后对比刚刚可以安装和不能安装的版本之间的差异。由于这类安装问题,一般多和配置关系比较大一点,所以直接看配置文件,这一比对,发现了一条可疑数据,看下图:



由于上次在修改主代码的时候,为了适配高版本系统,对 targetSdkVersion 进行了修改,但是下载器上的一些版本还是老的设置,也就是 20 ,因此这次更新下载器的时候,由于我也适配了高版本,但是因为要安装的版本的 targetSdkVersion 比下载的要低,在6.0以上的机型上,会直接被拒绝,也就是提示“应用未安装”,但是坑爹的小米手机什么多余的提示都没有,导致找了好一会。

因为6.0以上,谷歌更新了权限获取方式等一些修改(没有深入,如有错,请大神指正,多谢),由于 targetSdkVersion 导致的问题,在6.0以上的系统上,会直接导致安装被拒。而如果把 targetSdkVersion 调整为 22 是没有问题的。即使安装包的 targetSdkVersion20 也可以正常安装。

好了,那这个问题的解决也就到此结束了。

戏外篇:就在我发现了问题,然后跟测试说,停止测试的时候,测试给我发了一张这样的图,顿时哭晕在办公桌。。。



ps:所以,很多时候,一个给力的测试机,会让你工作更轻松~(我要换菊花测试机啊啊!!!!!)