问题描述:

应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110)

原因分析:

  1. 开始怀疑是android的版本问题,后来看了一下在华为Mate8上面也能正常安装,华为Mate8和华为P9都是android6.0
  2. 华为P9 用的是 EMUI 4.1版本,但是华为Mate8用的是EMUI4.0, 初步怀疑是EMUI升级后的问题
  3. 打开Logcat,抓取Log后,查看到下面可疑的Log
05-14 19:51:04.094: E/HwCertificationManager(1004): read cert error:read certification file error! 05-14 19:51:04.094: E/HwCertificationManager(1004): read cert failed 05-14 19:51:04.094: E/HwCertificationManager(1004): checkHwCertification parse error 05-14 19:51:04.095: E/installd(534): Couldn't opendir /data/data/com.shb.assistant: No such file or directory 05-14 19:51:04.096: W/PackageManager(1004): Package couldn't be installed in /data/app/com.shb.assistant-1 05-14 19:51:04.096: W/PackageManager(1004): com.android.server.pm.PackageManagerException: hwcertification parse error 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.HwPackageManagerService.checkCertificationInner(HwPackageManagerService.java:3042) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.HwPackageManagerService.checkHwCertification(HwPackageManagerService.java:3024) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:6941) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:6930) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService.installNewPackageLI(PackageManagerService.java:12494) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:13215) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService.-wrap29(PackageManagerService.java) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.pm.PackageManagerService$10.run(PackageManagerService.java:10799) 05-14 19:51:04.096: W/PackageManager(1004):     at android.os.Handler.handleCallback(Handler.java:743) 05-14 19:51:04.096: W/PackageManager(1004):     at android.os.Handler.dispatchMessage(Handler.java:95) 05-14 19:51:04.096: W/PackageManager(1004):     at android.os.Looper.loop(Looper.java:150) 05-14 19:51:04.096: W/PackageManager(1004):     at android.os.HandlerThread.run(HandlerThread.java:61) 05-14 19:51:04.096: W/PackageManager(1004):     at com.android.server.ServiceThread.run(ServiceThread.java:46) 05-14 19:51:04.115: I/art(1004): Starting a blocking GC Explicit 分析应该是安装软件的时候,进行了证书的检查,发现软件不符合条件,导致不能安装。 翻看一下源代码:scanPackageLI  这个应该是对APK里的文件进行解析,但是华为肯定是修改了這个函数,添加了一个checkHwCertification的过程。 checkHwCertification里面应该是检查了华为特有的东西。
  1. 打开代码 在AndroidManifest.xml 找找有有没有什么华为比较在乎需要检查的东西,,一看果然发现了下个。

<uses-permissionandroid:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<uses-permissionandroid:name="com.huawei.permission.sec.MDM"/>
  1. 把这两个权限一删除,软件就可以正常安装了。
  2. 打开华为的官方文档,找到下面一段说明:
    2.3 将华为证书打包到开发者应用中
    使用上面提到的“DevPack.exe”工具,将刚刚下载的华为证书打包到开发者 APK 中:
到這里原因以及很明白了,就是开发这没有把证书加入到APK里面,导致安装的检查证书不通过。安装失败。 但是华为也很不地道,之前都没有这个过程,到P9上忽然加上这个限制,没有任何说明,直接就是软件安装失败。让广大开发者情何以堪。做android应用开发的小伙伴真是不容易,要应付形形色色的奇葩兼容性问题。

解决方案:

  1. 去掉角标功能,一般的应用是无法通过华为的审核的。在 AndroidManifest.xml删除下面的权限申明:

< uses-permission android:name= "com.huawei.android.launcher.permission.CHANGE_BADGE" /> <uses-permissionandroid:name="com.huawei.permission.sec.MDM"/>
  1. 把华为的证书打包到应用里面。

更多相关文章

  1. WebRTC android h264 编解码适配(二)
  2. Android(安卓)3.1后, 新安装的以及用户强行停止的apk, 无法监听
  3. Android(安卓)Studio 翻译插件Translation和strings.xml多语言文
  4. Android(安卓)判断是否有刘海屏
  5. Eclipse搭建Android(安卓)开发环境
  6. 《Google!Android2手机应用程序设计入门》笔记(1)
  7. 刘海屏适配总结
  8. Android开发之旅:环境搭建及HelloWorld (AVD无法启动,出现Starting
  9. Android(安卓)JAR组件安装打包教程

随机推荐

  1. 2010.12.22——— android 一个永远处于
  2. android空间动画
  3. 老罗Android开发视频教程(Android入门介绍
  4. Android(安卓)Intent 用法汇总
  5. Android(安卓)平台搭建
  6. 局域网内搭建Android(安卓)SDK更新源
  7. Android开机广播
  8. android布局 LinearLayout和RelativeLayo
  9. Android学习—— Android资料之-系统自带
  10. android 参数含义