admin管理员组文章数量:1531792
此项目是基于 mPaaS 框架,更新 APP 的功能
最近测试提的一个缺陷,线上的 APP 更新时,点击更新下载完安装包后点击安装无法调起 APP 安装。
出现问题的版本: android 10
- 代码排查
(PS:因为测试说是在 android 10 才会出现的问题,所以从一开始就朝着 android 10 适配的方向去排查问题)
- 1 “私有目录” 的适配(安卓 10 上对于目录权限的改动大家可以自行百度)
查看安装包下载的目录,发现下载好的新的安装包是存储在报名目录下的 download 文件夹中,所以排除了访问外部目录导致这个因素。
- 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
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android: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-path
name="download"
path="com..android.upgrade/downloads" />
<external-path
name="download_sdcard"
path="files/com.android.upgrade/downloads" />
</paths>
开心的是这个猜想是正确的,修改完之后 Mate 30 Pro 也正常进行安装了
不过还是没搞懂为什么没修改之前其他手机是可以的,如果又大佬碰巧看到我的疑问,希望解答一下。
版权声明:本文标题:APP 应用内更新,下载安装包之后调起安装界面无反应安装界面闪退返回到了 APP 页面 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725440451a1023501.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论