Android8.0以上更新程序报解析包出错的问题

第一次写,很多地方肯定有不足之处,希望大家理解,写的不对的地方也可以指正出来 我会进行修改。

这是本文的内容:

在实习中 我被安排写一个更新程序的功能,在android7.0以下是正常更新进行安装,但是在我测试华为Android8.0的手机和平板时,报了解析包出错的问题

我在AnroidManifest也加了新权限依然报错!

按理来说是没有问题的,我在系统中也打开了安装未知来源的选项,

最后

在网上找了很久终于找到了解决答案:

根本原因是

//apk安装
public static void install(Context context, String filePath,boolean force) {
    File apkFile = new File(filePath);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
        intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
    } else {
        Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", apkFile);
        intent.setDataAndType(uri, "application/vnd.android.package-archive");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    if(force){

    System.exit(0);

    }
}

其中的

System.exit(0);

 是报错的原因

System.exit(0)是结束应用程序的意思,我估计可能是在安装进程请求应用验证fileprovider权限时System.exit(0)(或者killProcess提前执行了,导致安装进程请求应用验证fileprovider权限失败

跟那个360加固好像有点类似 发出连接:

https://blog.csdn.net/JingleYe/article/details/82910812

你如果可能是这个错误 你先注销

//System.exit(0);

运行看看,如果没有报解析包错误,那可能就是这个原因了。让System.exit(0);延迟运行就可以了

Handler mhandler = new Handler();
mhandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        System.exit(0);
    }
}, 500);

我这写一个简单的handler延迟0.5秒运行,对用户来说,跳转到应用安装器时间也足够的,对计算机来说是完全够了,亲测也是ok的。

!!!!!!!!!!!!!!

 我的问题解决了

 

 

 

 

 

你可能感兴趣的:(Android8.0以上更新程序报解析包出错的问题)