[英]Cannot reach obb expansion file on android 10 device if apk and obb is downloaded from Google Play store
我从很多地方寻找解决方案( 如果在 Android 10+ 中禁用旧的外部存储访问, 则以编程方式测试, https://developer.android.com/google/play/expansion-files.html#Downloading等),但是不知道错误的确切原因。 如果仅在 android 10 设备的情况下从 Google Play 下载应用程序,则会出现以下错误:
Caused by: java.lang.IllegalArgumentException: Couldn't get OBB info for /storage/emulated/0/Android/obb/packageName/main.package_version.packageName.obb
该程序可以找到 obb 文件(即使在 android 10 设备上)
File mainFile = new File(Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName + "/" + "main." + packageVersion + "." + packageName + ".obb")
mainFile.getAbsolutpath()
也获取文件路径。 但是,当存储管理器用于从 Google Play 商店下载的应用程序时
sm.mountObb(mainFile.getAbsolutePath(), null, mainObbStateChangeListener );
它无法访问 obb 扩展文件并以上述错误终止应用程序。
应用程序可从 Google Play 下载,但仅适用于 android 9 或以下设备。 如果我创建 apk 并将其安装在 android 10 设备上,该应用程序可以毫无问题地访问 obb 文件。 当从 Google Play 商店下载应用程序时,我想念什么才能在 android 10 设备上运行应用程序? 帮助将不胜感激。
更新:
我在 Android 10 设备上找到了错误的原因,但我仍然不知道答案:
如果 apk 版本代码(app gradle 中的版本代码)与 obb 文件名中的版本代码匹配(如果我理解的话应该是这样的( https://developer.android.com/google/play/expansion-files) ),然后在 obbbexpansionmanager 类中,该行
sm.mountObb(mainFile.getAbsolutePath(), null, mainObbStateChangeListener );
抛出这个错误:
Caused by: java.lang.IllegalArgumentException: Couldn't get OBB info for /storage/emulated/0/Android/obb/packageName/main.package_version.packageName.obb.
如果我将下载的应用程序的 obb 文件更改为不同的版本代码(在 apk 的版本代码为 9 时使用版本代码 8、1、10 进行测试),则应用程序启动并且不会出现上述错误。 但是,除了 apk 的版本代码之外,我不能在 obb 文件的名称中使用不同的版本代码,以便能够从 Google Play 商店下载带有 obb 的 apk。 此外,除非匹配版本代码,否则无法从 obb 文件访问媒体文件。 如果设备在 Android 10 下,则应用程序在 apk 和 obb 扩展文件中使用相同的版本代码。
可以使用替代方法代替Environment.getExternalStorageDirectory()
Context.getObbDir()
它将返回用于运行应用程序的 OBB 目录的完整路径,即: /storage/emulated/0/Android/obb/packageName
.
这可以替换代码部分Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName
。 可以在此处找到此方法的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.