我们项目在启动的时候会去申请SD卡权限“WRITE_EXTERNAL_STORAGE”,以前这么做的原因是,曾经在不记得什么地方看过一篇文章说6.0的系统会需要这个权限,但是之前一直没测出来是为什么需要这个权限。今天,在520这个特殊的日子,终于发现了这个千古疑点。。
今天QA找我说,他先把obb文件放到目录下,再安装apk,就会解压失败。但是先安装apk再放obb文件,就没问题。
我一开始猜测是不是在安装apk的时候把我的obb删了,最后验证发现不是。obb文件在,就是无法解压。于是我重启了一下手机,就解压成功了。。。
这是一个必现问题,真是太好了。
于是开始加日志,就看到了底下的这一幕:
结论:
6.x的系统,当从谷歌商店下载应用的时候,如果obb比apk先下载完成,就会出现权限不足的问题。我们的解决方案是在读obb失败的时候,主动去请求WRITE_EXTERNAL_STORAGE权限。
(6.x系统应该是权限管理有漏洞,在obb下载完成的时候,去查找apk,给apk授权。obb比apk先下载完成的情况,就会找不到apk,导致授权失败。我猜是这样。)
为什么不在游戏启动的时候去申请呢?因为申请谷歌推荐位的时候,对方建议尽量不要在游戏启动的时候申请太多权限,欧美用户对权限这块会比较敏感。