Unity 编译的 Android 应用,访问 Application.PersistentDataPath: Access Denied

170 天前
 Xbathy

现象:App 编译出来之后,大概率可以正常运行,也就是可以访问这个路径。可以正常运行的情况下,运行几次之后或者过段时间就会报错 Access Denied.

Application.PersistentDataPath:在安卓平台的路径为 Storage/emulated/0/Android/data/包名/files.

设备:小米平板,系统 Android13.

注:通过文件管理器查看,在 Storage/emulated/0/Android/data/包名/files 路径下目标文件是存在的,也不是文件占用问题,因为应用重启和设备重启都不起作用.

请大佬提点可能是哪里的问题导致的!

3577 次点击
所在节点    Android
13 条回复
dvsilch
170 天前
不是很懂 Android ,猜测是 AndroidManifest.xml 里需要一些配置项,之前权限相关我看同事一般是通过修改这个文件来实现的
sunny352787
170 天前
没见过,Application.PersistentDataPath 一般不会有问题,大概率是你添加的文件路径写的有问题,输出一下检查看是不是有非法字符或者斜杠反斜杠之类的错误
Xbathy
170 天前
@dvsilch 是的,这里个里面也配置了,奇怪的就是这个权限会在运行几次之后失效,也就是没有权限访问了.
Xbathy
170 天前
@sunny352787 路径没问题,因为他可以正常读取文件,只是读取几次之后,或者过段时间就会没有权限了,很奇怪.
vyronlee
170 天前
我们项目也出现过类似问题,表现就是 AB 包文件是存在的( Load 之前我们会自己用接口先判断文件是否存在),也是能加载的,但是运行一段时间后某个时刻却又无法加载进来,非常怪异;
社区里问过大佬,他们说是各家的安卓系统文件操作接口各种魔改作妖,未必是按照规范来,建议都加上 READ/WRITE_EXTERNAL_STORAGE 自己再测试验证(我没实测过,不做保证,因为副作用很大,APP 启动时会弹相册权限请求所以就放弃了)
jetkeey
170 天前
@vyronlee 最后你们是怎么解决这个问题呢
vyronlee
170 天前
没解决,发行方不让加权限。因为发生概率不是很大(大概 1w 次启动里有几十次发生)就搁置了。
janus77
170 天前
0 是 root 用户吧?这里应该用你当前用户的 uid 的,你这个看起来是硬编码,当然访问不了了,不能这样写,要用 Android 提供的 API
Xbathy
170 天前
@janus77 不是硬编码,这个是 Unity 的接口,会根据平台自动生成相应的路径.
Xbathy
170 天前
现在发现可能不是权限问题了,是 Unity 的 Application.PersistentDataPath 在安卓平台的值会变 大概率是 Storage/emulated/0/Android/data/包名/files. 偶尔会变成 data/user/0/包名/files. 这是什么情况...
x13945
170 天前
@Xbathy #10 前者是外置存储,后者在系统的 data 分区上。现象看起来像是外置存储的访问状态出了问题,才切换到了 data 分区。可以在出问题的时候,检查一下外置存储的状态。
Xbathy
170 天前
@x13945 这是不是得写 Java 了?
x13945
170 天前
@Xbathy #12 如果只是为了验证问题,可以在出现问题的时候执行 adb 命令:adb shell ls /sdcard/ 看看能否正常访问

至于运行期间检测,我不太了解 Unity ,Java 有专门的 api:boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/993290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX