Android 安装APK出现的问题

Android 安装APK出现的问题



一、问题描述

1.安装时提示安装包已损坏、解析包错误

2.通过代码覆盖安装时崩溃

3.安装失败、点击安装没反应


二、解决方法

   当碰到以上问题,如第一种问题,提示安装包已损坏,有两种可能,1,安装包下载的过程中网络不佳导致下载不完整。2,安装包的versioncode比手机中的应用程序versioncode低,会提示安装包已损坏。有的童鞋会碰到解析包错误的问题,在app打开后在自动更新中出现了问题,具体表现为:在7.0以上系统中可以正常的完成覆盖安装,但是在7.0以下中出现了。如果某些童鞋在AndroidManifest.xml中配置了系统权限(比如:SDCard文件创建与删除)。因为这种权限需要手机root才行,所以文件的操作还是在手机内部更好点。。。

    第二种问题,覆盖安装时崩溃,首先检查一下代码问题,如图


安装崩溃一般都是在7.0以上手机出现,因为现在7.0以上手机为了提高安全性,修改了Uri的获取方式,不对外公开,如果没有用到FileProvider的童鞋注意了,这个会引起FileUriExposedException异常。所以7.0以上手机Uri获取方式必须用FileProvider获取(FileProvider具体信息请问度娘)。7.0以下手机还是可以照原来的方式获取。图中的authorities属性为 包名.fileprovider。如果还是碰到安装崩溃问题,可以检查一下图中两个位置是否一致,如果不一致的话会引起NullPointnterException异常、XmlResoursceParser错误。注意大小写。


第三种安装失败或者点击安装没反应的,比如因需求调整了build.gradle文件下的targetSdkVersion版本,线上版本的targetSdkVersion是24,如今被我改成22了,所以低版本的targetSdkVersion是无法覆盖安装高版本的targetSdkVersion的。把当前项目的targetSdkVersion版本调整成跟线上版本一样,或者高于线上的,不然覆盖安装是会报错的。还有一种可能华为手机需要在AndroidManifest.xml中配置一个权限,此权限为8.0手机安装时需要的权限。 在8.0的手机中PackageManager类中多了canRequestPackageInstalls()这个方法来检查是否已经获取到允许安装未知应用,所以我们在代码中只需要通过调用packageManager.canRequestPackageInstalls()返回的boolean值来判断是否能进行下一步安装,会导致无法弹出覆盖安装的界面即点击安装无反应。


如果还是无法找到问题原因,也可以通过用adb安装的方式查看 。


图一、用adb命令查看设备是否连接
图二、通过 adb install  -r 路径+包名.apk(注意路径不要包含中文)

通过这种方法来定位问题,图二中最后一行如果成功就显示success,失败会显示error错误信息。最后系统会告诉你问题的具体信息(有些信息通过logcat无法查看)。

adb install 路径+包名.apk   安装apk

adb install  -r 路径+包名.apk   覆盖安装apk


以上就是个人在开发中碰到的问题,如果大家有什么问题可以发出来一起讨论。

你可能感兴趣的:(Android 安装APK出现的问题)