缘由
前几天运营说运营商对平台的app退出方式提了新要求,我们做的是电视盒子的app,目标受众和普通app不太一样,本来是不应该频繁更新的,用户体验会不好,但是谁让我们遇到不讲理的甲方了呢,一个小功能必须要改,没办法只能上了。
坑
开发过程一切顺利,当打好包测试覆盖安装时怎么也安装不上,提示解析失败,一般像这种情况多半是签名问题,当时心里一紧--难道上次升级是debug版本的,心想完了。但是后来又一想不会这样,每次升级apk都是发的邮件,他们不会有debug版的安装包,看来不是签名问题。然后后面就开始一种可能一种可能的试:
- 系统不允许从磁盘安装--测试安装其他产品apk,覆盖安装没问题,说明不是这个问题
- 打包的apk文件有问题--卸载原来app,从磁盘全新安装没问题--安装包也没问题
这两步试完就很绝望了,继续猜测可能版本号有问题,所以版本号改大了几位,重新试还是不行,没办法想着打印下安装过程的日志,看看会不会有什么惊喜,日志很长,就先试着搜索下包名,一搜还真发现了,具体在加粗部分:已经安装的版本号比我们新打包的版本号高,看到这又联想起之前的一件事马上就明白了
//.......有删减
03-26 10:49:23.693 4389-17804/? I/ActivityManager: START u0 {dat=file:///storage/external_storage/sda4/测试apk/xxxxxxxxxx.2.001.025.022_new.apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras)} from pid 3453 03-26 10:49:23.693 4389-17804/? I/ActivityManager: start package name is com.android.packageinstaller, class name is com.android.packageinstaller.InstallAppProgress, error code is 0 03-26 10:49:23.713 4389-17804/? W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1206 com.android.server.am.ActivityStackSupervisor.startActivityLocked:1334 com.android.server.am.ActivityStackSupervisor.startActivityMayWait:761 com.android.server.am.ActivityManagerService.startActivityAsUser:3376 com.android.server.am.ActivityManagerService.startActivity:3354
//.......有删减
03-26 10:49:23.743 3453-3453/? W/InstallAppProgress: Replacing package:com.xxx.xxx 03-26 10:49:23.763 4389-4633/? W/ActivityManager: No content provider found for permission revoke: file:///storage/external_storage/sda4/测试apk/xxxxxxxxxx.2.001.025.022_new.apk 03-26 10:49:23.763 4389-4633/? W/PackageManager: Can't install update of com.xxx.xxx update version 20170920 is older than installed version 20180205 03-26 10:49:23.813 4389-4462/? I/ActivityManager: Displayed com.android.packageinstaller/.InstallAppProgress: +91ms
//.......有删减
结论
去年大概9、10月的时候我们app上线,下载安装但是怎么也打不开,后来我还出差过去看到底怎么回事,结果去了一看下载的根本不是我们的app,而是另一个省和我们同包名的一个app,也就是说我们上线产品是按省划分的,但是他们安装确是从全国搜索出来的,这样一个很严重的bug,然后反馈给运营商后给我们的产品特殊处理了,包括检测升级部分,他们是手动设置了一个版本号来检测升级,不是根据apk的versionCode来判断,然后他们就根据当时的日期给我们app设了个版本号然后就比我们app的versionCode高了导致怎么也安装不上,这里不得不吐槽下,运营商半年了bug还没改,之前还能正常覆盖安装,现在改的都不能覆盖安装了,越改bug越多。