关于Android安装apk出现解析包异常问题情况总结
原文地址:关于Android安装apk出现解析包异常问题情况总结 | Stars-One的杂货小窝
说之前,可以推荐下各位使用这个开源库AndroidUtilCode,下面提及到的工具类,都是在此库中
以下说的解析包异常,是指进到安装页面就立马出现了错误提示
而不是在可以正常进入安装界面,然后点击了安装按钮之后后,最后弹出个安装失败的提示
这两个情况是有所区别的,需要注意!!
而下面总结的6种情况,第6种情况就是进入到安装界面了,然后点击安装按钮,出现了127的错误码提示
当然,遇到的情况不多,可能总结不全,若是有所遗漏,各位可以在评论区回复下
总结
- apk下载过程中损坏
- 安装的代码有问题(没有申请对应权限)
- 高版本下载apk不成功(apk文件读取不到导致报错)
- 存储权限未申请,Android8以上,没有申请允许应用安装未知应用的权限
- apk要使用v1+v2签名,v2是适用于Android7.0以上版本的安装
- Android12版本安装才出现的问题,原因是清单文件中需要声明exported属性
1.apk下载过程中损坏
这个情况,没有太多展开可以说的,比较少见,及网络下载过程中,apk文件损坏了,导致解析包出现异常
2.安装apk代码有问题
这里统一推荐使用AppUtils.installApp();
方法去安装apk,里面进行了Android8.0的版本兼容处理,包含安装第三方应用的权限申请
动态申请前,别忘了需要在清单文件中声明此权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
3.高版本下载apk不成功
这个问题是我目前排查apk出现过的问题,由于之前的项目中,是固定下载在Download文件夹中,但是,在Android10之后,存储权限发生变更,导致无法直接将文件下载到Download文件夹,从而导致文件下载失败,进而导致出现解析包异常
解决方法只要适配下Android10之后的路径问题即可
这里推荐下载在app自己的files文件夹中即可解决问题,使用此路径PathUtils.getExternalAppDownloadPath()
即可
4.权限未申请
这里需要说下有两种权限,一个是存储权限,另外一个则是安装第三方应用的权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
存储权限的话,Android6.0需要手动申请,这里不再过多赘述
5.apk签名问题
这里也是比较常见的问题了,原因是我项目使用了360加固,然后,进行了重签名导致
之前一直都是使用命令行进行重签名,没太注意到,其实v2的参数需要声明,加固后的安装包一直没有v2签名
而Android7.0版本都是需要验证v2版本签名,自然是出现了问题
之后进行了尝试,并且稍微封装了一个用来签名的工具,就不用每次都要输入命令了
感兴趣的可看此链接ASCTool: apk签名验证破解工具 Apk Signature Crack Tool
6.Android12版本安装出现问题
targetSdkVersion为31【以Android 12为目标】的应用务必要加入v2签名,务必要对使用的activity,service,broadcast receiver含有intent-filter,显示声明android:exported属性。
AndroidManifest文件中,有intent-filter的属性的四大组件,需要声明exported属性为true
即下面截图这种情况
如果适配安卓12的系统,调用的sdk是31的话。可能需要进行适配。
出现安装失败22的,有可能是因为activity或者receiver,service里面没有加上android:exported="false"这个字段。
注意在launcheractivity里面一定要设置android:exported为true。这个是外部引用的意思。
如果在launcheractivity里面没有设置为true。那么APP图标点击就会出现未安装该应用程序。
如果出现安装失败-127的话。是因为你的manifest里面声明的权限重复了。
关于Android安装apk出现解析包异常问题情况总结的更多相关文章
- Unity打包android的apk与数据包.obb分离和apk签名
那么,通过以上图片.我相信大多数人已经知道怎么创建了,apk签名比較简单,假设之前没有签名文件.那么选择图中的Create New Keystore然后在以下两个password框中输入passwor ...
- android安装apk
* 安装apk */ private void installApk() { // 获取当前sdcard存储路径 File apkfile = new File(Environment.getE ...
- Android 获取android安装apk框的安装状态(如点击取消、返回)
最近鼓捣android,碰到个问题,因为没有root权限,需要调用Intent安装apk,但需要获取用户是否安装了(如,用户点击了返回或取消),查了很多文章,最后可以解决,但有瑕疵,解决方法如下: p ...
- android -------- 安装APK报错:Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE解决方法
记录一个 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK问题 之前遇到这个问题 方案1 将data/data/目录下该应用的包名的目录删 ...
- Android安装APK报错:Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE解决方法
今天调试一个android应用的时候,安装报了Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE错误,代码如下: [2015-12-28 15 ...
- Android安装apk时报错:INSTALL_FAILED_NO_MATCHING_ABIS
问题背景 OS:无关 AS:无关 Genymotion:2.5.2 Virtual Device:Google Nexus 5 - 5.1.0 - API 22 原因分析 CPU架构不符 解决方案 对 ...
- android手机上安装apk时出现解析包错误的一个解决办法
今天下午在学习安卓开发时,学习开发文档中的gridview时,在模拟器上调试程序一切正常,如下图所示: 但当将bin目录下的HelloGridView.apk拷贝到M8安卓系统后进行安装时,出现了“解 ...
- Android包管理机制(二)PackageInstaller安装APK
前言 在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInsta ...
- android之apk自动更新解析包失败问题
在apk自动更新(相关问题可以看我的博客http://blog.csdn.net/caicongyang) 从服务器下载完成后,点击notification提示安装时,每次都报解析包失败错误!首先我想 ...
随机推荐
- Markdown初识及基本使用
Markdown初识及基本使用 由Typora编写. 一.初识Markdown 允许人们使用易读易写的纯文本格式编写文档. 是一种轻量级标记语言 编写的文档可以导出 HTML .Word.图像.P ...
- nacos底层原理
Nacos 为什么选择NacosNacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮 ...
- java 基础知识(四)
自己写一个简单的Map 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料 130 人赞同了该文章 许多许多年以前,在自学Java的时候,笔者曾经写过一个简单的Map,当年很有 ...
- Listener是什么?有什么作用?
Listener是指Servlet中的监听器. Listener可以对ServletContext对象.HttpSession对象.ServletRequest对象进行监听.
- MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?
1.设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率. 2.选择合适的表字段数据类型和存储引擎,适当的添加索引. 3.MySQL 库主从读写分离. 4.找规律分表,减少单表中 ...
- 线程的 sleep()方法和 yield()方法有什么区别?
① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会:yield()方法只会给相同优先级或更高优先级的线程以运行的机会: ② 线程执行 sleep()方法后 ...
- 使用 Spring 访问 Hibernate 的方法有哪些?
我们可以通过两种方式使用 Spring 访问 Hibernate: 1. 使用 Hibernate 模板和回调进行控制反转 2. 扩展 HibernateDAOSupport 并应用 AOP 拦截器节 ...
- Java 中,Maven 和 ANT 有什么区别?
虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多, 在基于"约定优于配置"的概念下,提供标准的 Java 项目结构,同时能为应用自 动管理依赖(应用 ...
- 学习heartbeat-05 实现web服务高可用
一.环境介绍 说明:所有案例在虚拟机(VMware)上完成 操作系统:centos 6.5 64bit 高可用软件:heartbeat 3.0.4 Web应用服务器:apache httpd 2.2. ...
- vulnhub 靶机 Kioptrix Level 1渗透笔记
靶机下载地址:https://www.vulnhub.com/entry/kioptrix-level-1-1,22/ kali ip 信息收集 先使用nmap收集目标的ip地址 nmap -sP 1 ...