版本更新是每个应用必不可少的功能之一.但是官方又没有一个实例来说明具体应该怎么做,于是就都是baidu别人的各种方案.但是网上的答案有的相当坑.吃了一个大亏.特此记录下.

现象:

加固前能正常更新,使用第三方加固乐固加固或者360加固后就不能正常安装

原因:
我的版本更新流程如下

 String mimeDefault = "application/vnd.android.package-archive";if (mFile == null) {return;}try {Intent intent = new Intent(Intent.ACTION_VIEW);//兼容7.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//必须是addFlag setFlags 是覆盖权限intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);//这里牵涉到7.0系统中URI读取的变更String authority = BuildConfig.APPLICATION_ID + ".fileprovider";Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", mFile);intent.setDataAndType(contentUri, mimeDefault);//兼容8.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();if (!hasInstallPermission) {startInstallPermissionSettingActivity();return;}}} else {intent.setDataAndType(Uri.fromFile(mFile), mimeDefault);}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {//如果APK安装界面存在,携带请求码跳转。使用forResult是为了处理用户 取消 安装的事件。外面这层判断理论上来说可以不要,但是由于国内的定制,这个加上还是比较保险的startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);} else {startActivity(intent);}} catch (Throwable e) {e.printStackTrace();}finally {//特此记录不能加,不然加固包解析错误
//            android.os.Process.killProcess(android.os.Process.myPid());}

关键代码

 android.os.Process.killProcess(android.os.Process.myPid());

加了这个killProcess方法在加固前和加固后体现不一样.为什么要加这个呢,是因为
看了某些博主加的这个.因此就被坑惨了.至于具体是什么原因导致的呢,腾讯是这么回复的.

意思是他们也不知道什么原因导致的,据我分析,可能是因为加固需要当前应用存活才能启动成功.为此做了一个实验.

 String mimeDefault = "application/vnd.android.package-archive";if (mFile == null) {return;}try {Intent intent = new Intent(Intent.ACTION_VIEW);//兼容7.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//必须是addFlag setFlags 是覆盖权限intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);//这里牵涉到7.0系统中URI读取的变更String authority = BuildConfig.APPLICATION_ID + ".fileprovider";Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", mFile);intent.setDataAndType(contentUri, mimeDefault);//兼容8.0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();if (!hasInstallPermission) {startInstallPermissionSettingActivity();return;}}} else {intent.setDataAndType(Uri.fromFile(mFile), mimeDefault);}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {//如果APK安装界面存在,携带请求码跳转。使用forResult是为了处理用户 取消 安装的事件。外面这层判断理论上来说可以不要,但是由于国内的定制,这个加上还是比较保险的startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);} else {startActivity(intent);}} catch (Throwable e) {e.printStackTrace();}finally {//手动休眠5秒Thread.sleep(5000);//特此记录不能加,不然加固包解析错误android.os.Process.killProcess(android.os.Process.myPid());}

手动休眠5秒再kill当前进程,可以正常版本更新!!!
这是有多坑,希望看到的人都不会出现这个问题!!!

Android加固后版本更新解析包时出现问题相关推荐

  1. android 7.0 以上 解析包时出现问题 解决思路

    有些手机更新包时下载完包后,杀死原有app跳到解析安装包的页面后,报解析安装包失败的错误.在有些手机上是没问题的.想起来有人问过我类似的问题,说是android8.0系统的问题.8.0上google把 ...

  2. Android 7.0解析包时出现问题 的解决方案(版本更新)

    问题描述 我们在进行Android开发的时候,一般都会在应用里检测有没有更新,并且从网上下载最新的版本包,覆盖本地的旧版本.在我的项目中,出现了一个问题,就是当安装包下载到本地的时候,产生了" ...

  3. 【Android开发】app升级报错,解析包时出现错误(华为手机8.0系统)

    问题描述: 今天发布app版本升级,碰到华为手机8.0系统,安装升级的时候提示,解析包时出现问题.而其他手机都是正常的.而且当我的包没有经过360加固的时候,也是可以去升级新版本,加固过后就不行了. ...

  4. Android 7.0解析包时出现问题 的解决方案(应用内更新)

    在工作上遇到了一个关于下载更新安装包无法安装的问题,解决之后特地在这里做一个笔记,遇到相似问题的朋友可以试试看能不能解决自己的问题. 问题描述 我们在进行Android开发的时候,一般都会在应用里检测 ...

  5. 软件内部更新,出现“解析包时出现问题”的错误后停止

    参考:connection.getContentLength()为负值 android 解析包时出现问题 常见原因: 下载的apk与安装的apk路径不一致(对比路径) apk没有下载完全(比较下载的a ...

  6. android之解析包时出现错误(二)

    为什么是二呢,之前遇到过一次了,详见http://blog.csdn.net/jason0539/article/details/12222173 这次的原因不同,再记录下 public class ...

  7. matlab在sin处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...

    原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...

  8. apk部分手机安装失败_安装apk解析包时出现错误怎么办?小编快速帮你解决

    Android智能手机的用户都会或多或少的遇到到这样的问题--"安装apk解析包时出现错误".那么遇到这样的问题该如何解决?其实导致apk程序安装失败的原因是多方面的,而这所有的错 ...

  9. matlab在tic处出现解析错误,破除“解析包时出现错误”方法大全,全部都在这了!...

    原标题:破除"解析包时出现错误"方法大全,全部都在这了! 相信许多使用Android设备的用户都会或多或少的遇到到这样的问题:解析包时出现错误.那么遇到这样的问题该如何解决? 其实 ...

最新文章

  1. “BCH压力测试日”准备工作开启,将允许任何人参与测试
  2. c# asp.net Pdf 转换图片 在线预览 发布到iis中问题 最终解决篇—_—!
  3. java 常见中文乱码问题解决
  4. Java并发机制底层实现原理-volatile
  5. python学习笔记二— 循环
  6. Javascript闭包概念剖析
  7. JDK源码解析之 java.lang.Error
  8. 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
  9. 设置mybb论坛后台显示为中文
  10. LwIP协议栈源码说明
  11. 建立U盘免疫病毒文件
  12. C语言----输入人数和姓名,输出最长姓名
  13. Verilog语法【参数化设计(parameter 和defparam)】
  14. java 无限循环_Java中的无限循环
  15. 维特比算法(viterbi)原理以及简单实现
  16. 联想3650m4服务器硬盘指示灯,IBM x3650M4面板Board亮黄灯 故障维修
  17. 如何查找和阅读综述性的文章
  18. [转载]CAE工程师:铁匠还是厨子,这是个问题
  19. 深入理解计算机系统(2.8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)
  20. 华为云确定性运维,为政务云平台稳定可靠运行保驾护航

热门文章

  1. 前端web页面通过VUE集成H5直播、点播播放器LivePlayer
  2. 峰米S5对比当贝NEW D3X,当贝NEW D3X画质秒杀峰米S5
  3. 打印html页面,并在每个页面添加页眉和页脚
  4. “幻核”跑路,数字藏品路在何方?
  5. Python 获取二维数组的某一列
  6. Python命令总结
  7. 饥荒联机版连不上服务器_饥荒联机版不搜索房间直连服务器教程 搜索不到房间怎么办-游侠网...
  8. Echarts中tooltip添加单位
  9. html可以编写爬虫吗,JavaScript能写爬虫吗?
  10. 三维 WebGIS 新玩具:OpenGlobus