Файл расширения - не удается загрузить .obb из /sdcard/Android/obb/ на Android 4.2

Я разрабатываю интеграцию obb для «файлов расширения». Я заставил его работать локально, скопировав файл .obb на SD-карту устройства (4.1), но на моих устройствах 4.2 он больше не работает.

1) На планшете 4.1: работает хорошо. Я отправил свой файл пакета расширений с помощью команды adb на планшете, а затем смог найти файл и прочитать его:

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/
shell@android:/sdcard/Android/obb/mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:01 main.1.mypackage.obb

2) В 4.2: та же процедура, что и выше, файл не «видим», оба метода exists() и canRead() в основном действии возвращают false.

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/
shell@android:/sdcard/Android/obb/mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:54 main.1.mypackage.obb

Решение : Оттуда я исследовал с помощью приложения «Передача файлов Android» и обнаружил, что папка obb пуста из инструмента… так что это не те папки, в которые я помещаю данные…

Я загрузил .obb с помощью приложения «Android File Transfer», и тогда он работает… Но в этом случае я не знаю, где хранятся файлы (не на SD-карте, я думаю??)

Решение для передачи файлов Android, которое работает при загрузке файла вручную

Итак, ребята, что мне нужно изменить в 4.2 для доступа к моему файлу .obb? заранее спасибо

Дополнительная информация:

а) Я сделал базовый тест для проверки существования файла, используя "file.exists() + " canRead=" + file.canRead()" с Environment.getExternalStorageDirectory :

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/Android/obb/packagename/main.1.packagename.obb");

б) Процедура написана по сценарию, поэтому проблема не возникает из-за ручной ошибки (и трижды проверьте все)

ИЗМЕНИТЬ

в) Подводя итог:

  • С «adb push» на 4.2 он работает для «обычных» данных: если я помещаю папку с изображениями в /sdcard/myfolder/, он работает, но не ниже /sdcard/android/.

  • Android File Transfer показывает папку «Android/obb» в корне, а файлы .obb видны из кода в этом случае, но:

  • Я не могу подтвердить, что он находится на /sdcard из «Приложения для передачи файлов Android», что меня беспокоит, так это то, что при выполнении «adb shell ls /sdcard/Android/obb» отображается, что папка пуста…
  • Я не могу использовать один и тот же сценарий для версий 4.1 и 4.2, проверить производственную процедуру и использовать ее в разработке, чтобы сэкономить много времени с помощью легкого apk (и сэкономить время на сборке и развертывании)…

РЕШЕНИЕ ДЛЯ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ

Для ‹ 4.1

adb push main.1.mypackage.obb /sdcard/Android/obb/mypackage/

Для >= 4,2

adb push main.1.mypackage.obb /mnt/shell/emulated/obb/mypackage/

person Nicolas Lauquin    schedule 05.08.2013    source источник
comment
Нашел другой пост на эту тему, но безуспешно: groups.google.com/ forum/#!topic/android-developers/TNjBYB2oKsw и форум. xda-developers.com/showthread.php?t=2110184   -  person Nicolas Lauquin    schedule 08.08.2013


Ответы (4)


Используйте монитор (Android Debug Monitor), чтобы поместить файлы расширения на ваше устройство для тестирования.

Мой опыт работы с Nexus 7 (без рута) с использованием командной строки adb vs monitor (Android Debug Monitor) gui:

1) adb push main.1.com.mypackage.obb /sdcard/Android/obb/com.mypackage/main.1.com.mypackage.obb

выглядел успешно. Однако приложению не удалось найти файл расширения, а проводник на устройстве не смог отобразить файл. примечание: устройство не было рутировано, и я не мог запустить adb root.

2) с помощью графического интерфейса монитора — запустите из командной строки с помощью: ../sdk/tools/monitor Использование графического интерфейса монитора показало, что местоположение /sdcard фактически указывает на несколько разных ссылок на файлы. Чтобы приложение увидело файл расширения, мне пришлось поместить файл расширения в правильное расположение связанного файла - в моем случае это был /mnt/shell/emulated/obb/com.mypackage - который оболочка adb все еще не отображала, однако приложения на устройстве могут получить доступ к файлу.

person neuroChemical    schedule 28.08.2013

Насколько я понял, все работает нормально, когда вы вручную загружаете файл в файловую систему Android. В таком случае я считаю, что проблема связана с какой-то ошибкой в ​​adb или опечаткой. В любом случае для загрузите файлы APK с серверов Google, и вам не придется иметь дело с adb или какими-либо другими утилитами, поэтому я думаю, что вам не нужно сосредотачиваться на этой проблеме.

не на SD-карте, я думаю ??

Если в папке /sdcard/ - то на SD-карте.

person uncle Lem    schedule 06.08.2013
comment
На данный момент на Android 4.2 я использую Android File Transfer для проверки функциональности, а не adb push, который не работает. У меня есть обходной путь, поэтому я сосредоточусь на следующих шагах… - person Nicolas Lauquin; 08.08.2013
comment
@Gros попробуйте использовать Android Monitor из SDK, чтобы поместить .obb в папку /sdcard/. И, кстати, у вашего устройства 4.2 вообще есть SD-карта? знак равно - person uncle Lem; 08.08.2013

Андроид в 4.2 поставил какую-то защиту для папки obb(для крякнутых игр и прочего). Дополнительную информацию см. в API для Android от Google.

person Crash    schedule 23.08.2013
comment
Я предполагаю, что это охранник, но я не нашел документации об этом. Вы даете ссылку на документацию, которой я следовал, но я не видел больше информации об этом, можете ли вы процитировать, в какой части говорится о защите? - person Nicolas Lauquin; 26.08.2013

Я отправляю свои резервные копии файлов obb из многих игр и предпочитаю отправлять их обратно через adb, и мне всегда приходится использовать полную строку структуры папок, поэтому попробуйте использовать

/mnt/sdcard/Android/obb/AppDataFolderNameHere

так что для вас код будет;

adb push main.1.mypackage.obb /mnt/sdcard/Android/obb/mypackage/
shell@android://mnt/sdcard/Android/obb//mypackage/ $ ls -al
-rw-rw-r-- root     sdcard_rw 20314171 2013-08-05 18:01 main.1.mypackage.obb

многие устройства Linux просто имеют SD-карту в событии папки mnt, хотя это отдельное устройство хранения.

person nathan jenner    schedule 23.05.2014