此项目是基于 mPaaS 框架,更新 APP 的功能

最近测试提的一个缺陷,线上的 APP 更新时,点击更新下载完安装包后点击安装无法调起 APP 安装。

出现问题的版本: android 10

  • 代码排查

(PS:因为测试说是在 android 10 才会出现的问题,所以从一开始就朝着 android 10 适配的方向去排查问题)

  1. 1 “私有目录” 的适配(安卓 10 上对于目录权限的改动大家可以自行百度)

查看安装包下载的目录,发现下载好的新的安装包是存储在报名目录下的 download 文件夹中,所以排除了访问外部目录导致这个因素。

  1. 2 安卓10 对于后台启动 Activity 做了限制

安装操作是用户点击 “安装更新” 按钮才调起安装界面的,因而这个因素也可以排除

(【黑人问号.gif】,那不对呀!安卓 10 上的改动与更新安装包有关的也就这两个点了,感觉方向有点跑偏了......)

  • 没有其他思路了,抱着死马当活马医的心态我插上了数据线打算调试一下。(手上的测试机:华为 Mate 20 Pro/ Android 10.0)

无论怎么点击立即安装,APP 都没有作出任何反应,日志上也看不到明显的报错(然后我忍痛将自己的手机【Redmi K20 Pro / Android 9.0】 升级到了安卓 10 )

好消息是,用 Redmi 手机调试的时候可以看到点击 “立即更新” 会跳转到系统安装页面又很快闪退回来 APP。日志中可以看到明显的报错信息是缺少了 REQUEST_INSTALL_PACKAGES 这个权限,加上这个权限后在 Mate 20 Pro 和 Redmi K20 就可以正常调起安装页面了。

出了新包,通知测试进行复测后,测试传来捷报,华为 Mate 30 Pro 依旧无法调起安装页面(我也是很无奈,Mate 20 可以,Mate 30 不行,安卓机型的适配一直都是个大坑,总是会有一些莫名其妙的问题),没办法,只能接着排查问题。

顺着安卓 10 私有目录的思路(我想 APP 无法调起安装页面的原因会不会是因为访问不到下载好的安装包)浏览了不少的博客文章,发现一个跟 “私有目录” 相关的一个东西,就是 FileProvider。FileProvider 是安卓 7.0 引入的一个机制,用来对 file://uri 的使用进行规范(关于 FileProvider 的使用有兴趣的自行百度)。

在使用 FileProvider 的时候,我们会再 AndroidManifest.xml 文件中配置 provider

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

其中 file_paths 的内容如下所示(代码中配置的目录则会决定外部 APP 所能够访问的你的 APP 的路径,下面的是我修改过的,考虑到如果是因为安装程序无权限访问 APP 安装包所在的目录,所以就把原来配置的 <external-files-path> 路径修改成了安装包所在的目录):

<!--
<root-path/> 代表设备的根目录new File("/");
<files-path/> 代表context.getFilesDir()
<cache-path/> 代表context.getCacheDir()
<external-path/> 代表Environment.getExternalStorageDirectory()
<external-files-path>代表context.getExternalFilesDirs()
<external-cache-path>代表getExternalCacheDirs()
--><paths><files-path path="." name="sdcard"/><external-files-pathname="download"path="com..android.upgrade/downloads" /><external-pathname="download_sdcard"path="files/com.android.upgrade/downloads" /></paths>

开心的是这个猜想是正确的,修改完之后 Mate 30 Pro 也正常进行安装了

不过还是没搞懂为什么没修改之前其他手机是可以的,如果又大佬碰巧看到我的疑问,希望解答一下。

APP 应用内更新,下载安装包之后调起安装界面无反应/安装界面闪退返回到了 APP 页面相关推荐

  1. 加快Linux上yum下载安装包的速度(以CentOS 7,安装gcc为例)

    今天在学习Linux的过程中,学到了关于包的安装问题:rpm包管理和yum在线管理两种方式:这里因为我在实验yum安装gcc出现了网速超级慢的问题,于是搜索解决方案,重新配置repo得以解决,记录整个 ...

  2. android_ android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术)/从酷安市场下载安装包

    android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术-) download app(apk) Releas ...

  3. 小米妙享更新的安装包下载到了电脑的哪里

    本教程前提是针对已经会pojie安装限制的家人们 首先检查更新,下载安装包 为了不让非mi电脑用妙享中心小米真是煞费苦心 直接把路径分离出来了,这谁一眼能看到啊!!!??? 反手Everything一 ...

  4. linuxoracle静默安装应答文件修改_Windows7重要更新补丁安装包 2020.01.17

    2020年1月14日微软官方宣布正式停止支持Windows 7(以下简称Win7),除付费政企用户外,不再提供安全补丁或者更新服务.那么以后win7的更新要怎么办?难道只能"裸奔" ...

  5. 知云文献翻译打不开_最新版知云文献翻译 | 内附软件安装包

    点击上方蓝字了解更多精彩 免责声明 所有资源全部为免费分享,大部分资源来源于网络,所有资源仅供学习和交流使用,严禁商用,如有侵权,请联系我们删除,谢谢合作. 知云文献翻译 知云文献翻译是一款十分专业且 ...

  6. 微信跳转手机默认浏览器打开指定HTML链接 微信点击链接直接下载安装包实现方式及源码

    需求:微信跳转手机默认浏览器打开指定HTML链接 微信点击链接直接下载安装包 原因:在微信内不允许直接下载apk 这里有一个解决方案,直接上关键代码 <!doctype html> < ...

  7. golang 通过go get | go mod download下载安装包

    golang 通过go get | go mod download下载安装包 安装完golang后,输入go env可以看到 GOPATH="/home/zhongzhanhui/go&qu ...

  8. r语言从网页下载东西内容 r安装特定版本的r包 r从网页下载 安装包

    加载 library(RCurl) getBinaryURL(url, -, .opts = list(), curl = getCurlHandle(), .buf = binaryBuffer(. ...

  9. go语言 第三方包安装方法_Adobe AE 2020 软件下载安装包教程(附下载方法)

    Adobe After EffectsCC 2020绿化版 AE CC2020电脑版下载.Adobe After Effects 2020(AE 2020)是一款由Adobe公司开发的电影视觉效果和动 ...

最新文章

  1. Real World Haskell 第七章 I/O
  2. neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead
  3. Spring为什么建议构造器注入?
  4. Shiro权限控制笔记要点
  5. bapi sap 创建物料_SAP使用BAPI创建物料主数据的最小输入-阿里云开发者社区
  6. VTK:图表之ColorEdges
  7. Mybatis源码阅读(四):核心接口4.2——Executor(下)
  8. 计算机基础知识复习资料,计算机基础知识复习资料
  9. 工作不能混日子,给自己留言
  10. php 中文字符串截取函数--比较好的
  11. Linux使用evhttp实现一个简单的HttpServer
  12. JavaScript基础学习(一)—JavaScript简介
  13. 苹果三星手机被诉辐射超标;淘集集启动破产清算;Drupal 8.8.0 发布 | 极客头条...
  14. 初识EMCASCRIPT 模块化
  15. Node.js 8有哪些重要功能和修复? 1
  16. 安居客头部导航栏的编写
  17. PHP超级外链工具源码/无后台一键批量外链源码
  18. windows/linux远程开关机原理及实现
  19. ubuntu系统学习(1) 测网速命令/实时显示网速speedometer
  20. 一周疫情对行业影响观察 | 中国资产或成避险资产;亚太旅游零售业呼吁政府财政支持...

热门文章

  1. 第七课 极限学习机( Extreme Learning Machine, ELM)
  2. 高品质的蓝牙耳机有哪些?四款高品质蓝牙耳机推荐
  3. android相册加密如何实现,vivo手机如何给相册加密?vivo手机相册加密教程
  4. c语言中的countif函数,COUNTIF函数高能应用
  5. 同一个SqlHelper链接不同的数据库
  6. Linux——进程间通信(共享内存shm)笔记
  7. ffmpeg‘不是内部或外部命令,也不是可运行的程序 或批处理文件。
  8. Android 快速开发系列 打造万能的ListView GridView 适配器
  9. Linux core dump文件设置以及查看
  10. ATMS启动Activity流程 - 安卓R