Android应用解析包错误原因的总结(不定时更新)

您所在的位置:网站首页 安卓平板安装app权限 Android应用解析包错误原因的总结(不定时更新)

Android应用解析包错误原因的总结(不定时更新)

2023-07-20 12:38| 来源: 网络整理| 查看: 265

Android应用解析包错误的原因

导致这个问题的原因目前就我所知道的而言大致有三种(其他原因请看文章末尾):

一、使用v1、v2方式签名带来的问题二、Android7.0新特性导致的原因三、应用内更新没有读取权限导致的安装包解析失败 一、使用V1、v2方式签名的问题

既然说到所谓的v1、v2签名,那么我们首先要知道啥是v1、v2签名,它们有什么作用,它们的区别在什么地方。知道了这些之后你就会基本搞明白为什么有时候会出现安装失败的情况出现。

1、什么是v1、v2签名

V1签名:即Jar Signature,可以理解为只对jar进行了签名; V2签名:即Full Apk Signature,可以看成是对整个Apk文件进行签名; 比较官方的说法是: 这个签名(v2)是在整个APK文件的二进制内容上计算和验证的,而不是在v1的归档文件中解压缩文件内容

2、使用V1或V2签名的apk有那些区别

单独的对Apk进行V1或v2签名会产生什么样的结果:

V1:在v1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改------文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理。V2:v2签名验证了归档中的所有字节,而不是单独的ZIP条目;这就造成了如果你在构建过程中有任何定制任务,包括篡改或对Apk文件进行加固,请尽量不要使用它们,否则可能会导致你的v2签名失效,从而使你的APKs与Android 7.0和以上版本不兼容。

V2签名是在Android Studio2.2后google推出的新的签名方式,那么相比于V1签名它有那些优点:

由于它是对整个apk文件进行签名,而一些对apk的篡改和处理可能会使签名失效,因此很显然的可以看出:它是一种更加安全的签名方式。使用V2方式签名的apk要花更少的时间在设备上验证(不需要解压),从而加快了应用安装时间。使用V2签名的安装包比使用v1签名的安装包的体积更小。 3、两种签名方式如何选择

到这里相信你已经对这两种签名方式有了一定的理解,那么在实际应用中我们应该如何选择呢?

1、 如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签名方式,但是一旦遇到签名问题,可以只使用 v1 签名方案; 2、如果需要对签名后的信息做处理修改,那就使用v1签名方案; 3、如果最后遇到各种不同的问题,可以不勾选v1和v2,直接打包签名。

二、Android7.0新特性导致安装包解析失败

Android7.0引入私有目录被限制访问和StrictMode API 。即在Android7.0私有目录下将被限制访问;StrictMode API是指禁止向你的应用外公开 file:// URI,如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,则会报出异常。 如果我们在代码中: Intent install = new Intent(Intent.ACTION_VIEW); install.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(install); 这在Android7.0及以上会使应用发生异常,解决方案就是我们可以使用FileProvider

三、对文件没有读取权限导致的安装包解析失败

首先我们应该知道一点,当我们在在应用内下载完安装包时,程序会调用我们的安装器离开我们的应用。这时会产生一个问题:我们下载的安装包在某些奇葩手机上写只有本应用有读写权限,当我们调用安装器时就离开了当前应用,安装器没有我们文件的读写权限。因此,会出现解析失败的情况。 这个时候我们可以通过在代码中写入linux指令修改此apk文件的权限,改为全局可读可写可执行: String[] command = {"chmod", "777", file.getPath() }; ProcessBuilder builder = new ProcessBuilder(command); try { builder.start(); } catch (IOException e) { e.printStackTrace(); }

其他情况 文件损坏,或者文件被修改;Android8.0权限问题,这不会导致解析包错误,但会报异常错误。需要在AndroidManifest.xml文件中添加权限"REQUEST_INSTALL_PACKAGES"。使用了第三方加固、多渠道打包工具(如:360加固)带来的兼容性问题,也是导致安装包解析失败的重要原因之一;所以建议开发者直接使用AS手动混淆代码和打包,尽量不要为了贪图方便使用第三方加固打包工具。对Apk的重复加固也会导致此问题。

在此致谢: https://blog.csdn.net/francisbingo/article/details/78655848 https://blog.csdn.net/willba/article/details/78885966



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3