Не удается получить доступ к файлу расширения obb на устройстве android 10, если apk и obb загружены из магазина Google Play - PullRequest
1 голос
/ 10 февраля 2020

Я искал решения во многих местах ( Тестировать программно, если в Android 10+ устаревший доступ к внешнему хранилищу отключен , https://developer.android.com/google/play/expansion-files.html#Downloading, et c.) , но не знаю точную причину ошибки. Если приложение загружается из Google Play только для устройств android 10, оно выдает эту ошибку:

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 Играть, но работает только для android 9 или ниже устройств. Если я создаю apk и устанавливаю его на устройство android 10, приложение может без проблем получить доступ к файлу obb. Что мне не хватает, чтобы иметь возможность запускать приложение на android 10 устройствах, когда оно загружается из магазина Google Play? Буду признателен за помощь.

Обновление:

Я нашел причину ошибки на устройстве Android 10, хотя я до сих пор не знаю ответ:

Если код версии apk (код версии в приложении gradle) соответствует коду версии в имени файла obb (что должно быть, если я правильно понял (https://developer.android.com/google/play/expansion-files), затем в классе obbexpansionmanager, line

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 загруженного приложения на другой код версии (тестируется с кодом версии 8, 1, 10 при коде версии apk было 9), затем приложение запускается и выше ошибка не появляется. Однако я не могу использовать другой код версии в имени файла OBB, кроме кода версии АПК, чтобы иметь возможность загрузить АПК с OBB из магазина Google Play. Кроме того, медиа доступ к файлам из файла obb невозможен, если он не совпадает с кодами версий. Если устройство находится под Android 10, приложение работает с одинаковым кодом версии в apk и в файле расширения obb.

1 Ответ

0 голосов
/ 31 марта 2020

Вместо Environment.getExternalStorageDirectory() можно использовать метод замены, который равен Context.getObbDir(), который будет возвращать полный путь к каталогу OBB, предназначенному для работающего приложения, то есть: /storage/emulated/0/Android/obb/packageName.

Это может заменить кодовая часть Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName. Подробнее об этом методе можно узнать здесь .

...