【Android开发】app升级报错,解析包时出现错误(华为手机8.0系统)

问题描述:

今天发布app版本升级,碰到华为手机8.0系统,安装升级的时候提示,解析包时出现问题。而其他手机都是正常的。而且当我的包没有经过360加固的时候,也是可以去升级新版本,加固过后就不行了。

这个导致这个问题的原因有很多,我先把我这边app的问题处理方案介绍给大家。

问题原因(360加固导致):

360加固会导致代码执行时间差异,我在startIntent后调用了killProcess(或者System.exit(0)),加固后killProcess可能提前执行了,导致安装进程请求应用验证fileprovider权限失败。so,去掉killProcess就行,但是我这里要强制升级,如果去掉这句话的后,我安装升级版本的时候点了取消就能还能进来,你可能会说检测升级放onResume(),应该也是可以,但是这样明显对增加了后台服务器的压力。

从这个博客知道的:http://bbs.360.cn/thread-15488054-1-1.html

我的处理方法:

直接上代码吧

public static void install(Context context, File file, boolean force) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        } else {
            Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".updatefileprovider", file);
            intent.setDataAndType(uri, "application/vnd.android.package-archive");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
        context.startActivity(intent);
        if (force) {
            //360加固后导致华为8.0系统,升级提示包解析报错
            weakHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    System.exit(0);
                }
            },500);
        }
    }

主要是使用weakHandler(防止内存泄露的handler,优秀的工具)延迟System.exit(0)的调用时机,这样System.exit(0)的调用时机被延迟了,系统安装进程就有时间请求应用验证fileprovider的权限,这里设置500毫秒,对计算机来说是完全足够了,亲测也是ok的,而对用户而言,跳转到应用安装器时间也足够。

WeakHandler来自github:https://github.com/lianzhan/weakHandler

PS:调试的时候,需要打包低版本来测试升级,因为问题是发生在低版本,而不是升级的版本,最后升级的版本也要使用修改后的包,以免下次再碰到

------------------------------------------------------------------分割线----------------------------------------------------------------------

以下再来讲讲这个问题的其它可能的原因

以下这行代码放在了setFlags的前面,导致flag被覆盖,建议都使用addFlags就不会覆盖。

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

博客:https://blog.csdn.net/qq_32452623/article/details/78924113

如果以上还解决不了你的问题,可以看下这篇博客:https://www.jianshu.com/p/04e14a1e957b

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leafseelight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值