如果从Google Play商店下载了apk和obb,则无法在android 10设备上访问obb扩展文件

问题描述 投票:1回答:1

我从很多地方(Test programmatically if in Android 10+ the legacy external storage access is disabledhttps://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()

也会获取文件路径。但是,当Storage Manager用于从Google Play商店下载的应用程序时

sm.mountObb(mainFile.getAbsolutePath(), null, mainObbStateChangeListener );

无法访问obb扩展文件,并因上述错误终止了应用程序。

可以从Google Play下载应用,但仅适用于android 9或更低版本的设备。如果我创建apk并将其安装在android 10设备上,则该应用程序可以正常访问obb文件。从Google Play商店下载Android 10设备上的应用程序后,我会错过什么?帮助将不胜感激。

更新:

我在Android 10设备上发现了错误的原因,尽管我仍然不知道答案:

如果apk版本代码(应用程序gradle中的版本代码)与obb文件名中的版本代码匹配(如果我理解得很好,应该是https://developer.android.com/google/play/expansion-files,然后在obbexpansionmanager类中,该行

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扩展文件中使用相同的版本代码。

android google-play android-10.0 apk-expansion-files
1个回答
0
投票

可以使用替代方法代替Environment.getExternalStorageDirectory(),后者是Context.getObbDir(),它将返回正在运行的应用程序的OBB目录的完整路径,即:/storage/emulated/0/Android/obb/packageName

这可以替换代码部分Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName。有关此方法的更多详细信息,请参见here

© www.soinside.com 2019 - 2024. All rights reserved.