Android 8.0+ 更新安装apk失败的问题

Posted 短暂的火光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 8.0+ 更新安装apk失败的问题相关的知识,希望对你有一定的参考价值。

最近做项目发现android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限

Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用。在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。

简单的方法  可以直接在Manifest.xml中加入下面的权限:(亲测可用)

<uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

另外当我们执行安装的代码后 都会加入杀死进程的代码 如下:

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);
                   //此处为Uri临时授权
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            } else {
                uri = Uri.fromFile(tempFile);
            }
private void install(String apkPath) {
Intent intent = new Intent(Intent.ACTION_VIEW);
//Android 7.0+ 需要用FileProvider的方式访问隐私目录(比如相册)
if (Environment.SYSTEM_VERSION_CODE >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile);
//此处为Uri临时授权
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
uri = Uri.fromFile(tempFile);
}else{
uri = Uri.fromFile(tempFile);
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

//最后杀死进程
Handler mHandler=new Handler(context);
mHandler.postDealy(new Runnable(){
public void run(){
//或者是 System.exit(0);
android.Process.KillProcess((android.os.Process.myPid());

}
},500);//在这里延迟 500ms 是为了防止app使用FileProvider获取隐私文件时被杀死 导致安装失败

}

 



























以上是关于Android 8.0+ 更新安装apk失败的问题的主要内容,如果未能解决你的问题,请参考以下文章

解决安卓11下apk安装失败的问题

Android开发对apk文件进行签名

Android - 通过意图安装 APK - 对失败做出反应

下载更新后 MobileFirst 8.0 直接更新失败

Android | Android Studio打包APK安装失败:应用是非正式版本,当前设备不支持安装

android studio更新之后打包遇到V1(Jar Signature) V2(Full APK Signature)问题