app升级时报 解析包时出现问题
一般关于app升级的问题都比较棘手,也不是问题麻烦,麻烦的是,更改不了上一个包的代码。
-
出现这种情况,有几种可能:
1、下载下来安装的包本身就有问题,直接重新换包更新不多说
2、Android手机系统太低了,不支持软件支持的最低版本,解决方法,换手机哈哈。
3、360加固的问题
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
} else {
//通过provider生成Uri
Uri uri = UpdateFileProvider.getUriForFile(context, context.getPackageName() + ".updatefileprovider", file);
//赋予临时权限给Uri
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
if (force) {
System.exit(0);
}
如果你的安装代码里面像这样,那么直接用没加固过的包更新没有任何问题,但是如果你用360加固过的包来进行升级的话,就会出现解析包时出现问题这个异常,原因是什么呢?
原因是: 360加固会导致代码执行顺序发生变化,强制更新安装的时候System.exit(0);
会先执行导致出错
解决办法:
- 新增
Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
权限,全的作用自己去查api吧 - 对杀死进程的代码做延时处理
if (force) { new Handler().postDelayed(new Runnable() { @Override public void run() { System.exit(0); } }, 500); }
为了安全起见,我两种方式都加了,这样就解决下一个版本强制升级的时候再出现 解析包时出现问题 这个问题了。但是这个版本似乎没有救了,唯一的挽回方式就是改成不强制升级。
参考链接https://bbs.360.cn/thread-15488054-1-1.html