Andriod8.0 APK版本自动更新失败

时间:2024-05-21 19:21:07

Andriod8.0 APK版本自动更新失败
前言
我们公司是大版本上应用市场,小版本上只是自己后台服务器,通过APK内部自动更新升级。这种情形下暴漏出了这次Bug,这边是公司大Boss拿着手机来找我们为什么版本升级不了?那边是各大应用市场一个新包没上,再加上ios那边新版本已经在使用了,真是到了进退两难的地步?尬尴的是第一时间还不知道是什么原因,算了不说了 直接上解决的详细方案吧!
事件原因

随着Android手机系统的不断升级,考虑到项目也要升级适应高版本的手机,然后就提升了项目的编译版本号,同时也将targetSdkVersion由22改成了26,就是自己这么不经意地一改就给自己埋下一个坑,正应了那句自己挖坑自己跳那句话。

Andriod8.0 APK版本自动更新失败结果就导致了只要是VERSION_CODE>22的安卓手机系统自动更新版本失败或者闪退。当时有人让我将targetSdkVersion改回22,但我觉得这不是最根本解决方法。
解决步骤

  1. 在清单文件里添加自动安装权限
       <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
  1. 在清单文件里自定义一个provider
    Andriod8.0 APK版本自动更新失败

Andriod8.0 APK版本自动更新失败

  1. 安装APK手机系统大小代码判断
 File apkfile = new File(saveFileName);
        if (!apkfile.exists()) {
            return;
        }
         Intent intent=  new Intent(Intent.ACTION_VIEW);
        Uri data;
        // 判断版本大于等于7.0
         if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
             data = FileProvider.getUriForFile(mContext, "自定义名称", apkfile); //自定义名就是manifest文件里<provider>的android:authorities="自定义名称" 
             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         }else {
             data = Uri.parse("file://" + apkfile.toString());
         }
        intent.setDataAndType(data, "application/vnd.android.package-archive");
        mContext.startActivity(intent);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  1. 总结
    只有踩过的坑越多自己积累的经验才会越丰富,Android系统在升级相应地也要及时更新相应的权限。其实这个问题就是一个高版本权限配置的问题。不同版本获取不同的权限的存储路径。