Android 7.0 安装失败的两个原因

来源:互联网 发布:无线网本地网络设置 编辑:程序博客网 时间:2024/05/21 17:40

提示安装失败,安装包不完整

原因

这是因为Android7.0作用域目录访问
在 Android 7.0 中,应用可以使用新的 API 请求访问特定的外部存储目录,包括可移动媒体上的目录,如 SD 卡。新 API 大大简化了应用访问标准外部存储目录的方式,如 Pictures 目录。应用(如照片应用)可以使用这些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。

此外,新的 API 简化了用户向应用授予外部存储访问权限的步骤。当您使用新的 API 时,系统使用一个简单的权限 UI,其清楚地详细介绍应用正在请求访问的目录。
具体查看官方文档:developer.android.google.cn

现象

app内升级会失败,因为下载完apk包之后,发intent安装时,没有读取包所在目录的权限,而导致读取失败,安装失败。

解决方式

 /**     * 通过隐式意图调用系统安装程序安装APK     */    public static void install(Context context) {        File file = new File(                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)                , "myApp.apk");        Intent intent = new Intent(Intent.ACTION_VIEW);        // 由于没有在Activity环境下启动Activity,设置下面的标签        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        if(Build.VERSION.SDK_INT>=24) { //判读版本是否在7.0以上            //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致   参数3  共享的文件            Uri apkUri =                    FileProvider.getUriForFile(context, "com.a520wcf.chapter11.fileprovider", file);            //添加这一句表示对目标应用临时授权该Uri所代表的文件            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");        }else{            intent.setDataAndType(Uri.fromFile(file),                    "application/vnd.android.package-archive");        }        context.startActivity(intent);    }

具体参考文章:下载安装APK(兼容Android7.0)

提示安装找不到安装证书

原因

Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。

虽然我们建议您对您的应用采用 APK Signature Scheme v2,但这项新方案并非强制性的。如果您的应用在使用 APK Signature Scheme v2 时不能正确开发,您可以停用这项新方案。禁用过程会导致 Android Studio 2.2 和 Android Plugin for Gradle 2.2 仅使用传统签名方案来签署您的应用。要仅用传统方案签署,打开模块级 build.gradle 文件,然后将行 v2SigningEnabled false 添加到您的版本签名配置中:
具体查看官方文档:developer.android.google

现象

美团多渠道打包工具就因为这个问题导致安装失败

解决方法

android {    ...    defaultConfig { ... }    signingConfigs {      release {        storeFile file("myreleasekey.keystore")        storePassword "password"        keyAlias "MyReleaseKey"        keyPassword "password"        v2SigningEnabled false      }    }  }
1 0
原创粉丝点击