Я искал решения во многих местах ( Тестировать программно, если в 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.