Внешние SD-карты с Android API 26

Evironment:

Android Studio 3.0.1. Все последние патчи применены. AVD Nexus 6, SD-карта внешняя.

Проблема: после запуска AVD внешняя SD-карта не отображается ни в ESExplorer, ни в моем приложении New Playlist Manager при просмотре локальных папок.

С помощью

adb shell
su
cd /storage
ls -al

шоу

emulated
self

поэтому нет внешней SDCard.

Однако, используя новое приложение Files, внешняя sdcard показывается. Кроме того, запуск средства выбора при запросе доступа к SD-карте (с помощью Storage Access Framework)

            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);

снова показывает внешняя SDCard

Я изучил несколько вариантов уровня selinux, используя класс MemoryStorage (размещен на этом форуме)

/ proc / mounts не возвращает внешнюю SDCard

/system/etc/vold.fstab не существует

Google еще раз изменил доступ к внешней SDCard?

Как я могу получить физическую внешнюю SDCard.?

Дополнительно: SDCard является частью файловой системы, как показано ниже, где LOST.DIR находится на внешней SDCard.

generic_x86:/ # ls -alR |grep LOST.DIR
drwxrwx--- 2 media_rw media_rw 2048 2017-12-04 15:06 LOST.DIR
./mnt/media_rw/14FA-3B13/LOST.DIR:

1 ответ

Я нашел это: новая оболочка файловой системы "SDCardFS"

Google официально не сказал ни слова об этом, но, очевидно, Android 8.0 поставляется с поддержкой новой оболочки файловой системы под названием "SDCardFS". Возможно, это утверждение слишком самонадеянно - с обновлением до 8.0 Google Pixel и несколько устройств Nexus волшебным образом начинают использовать SDCardFS, так что, вероятно, это означает, что новая схема хранения файлов доступна для любого в AOSP. Храбрые аппаратные хакеры из XDA отслеживают ход реализации, и, очевидно, SDCardFS должна значительно сократить накладные расходы ввода-вывода, связанные с доступом к общему хранилищу данных Android.

Ссылка:

arstechnica.com

https://arstechnica.com/gadgets/2017/09/android-8-0-oreo-thoroughly-reviewed/8/

еще одна интересная статья:

XDA разработчиков

https://www.xda-developers.com/diving-into-sdcardfs-how-googles-fuse-replacement-will-reduce-io-overhead/

а также

http://pocketnow.com/2015/12/18/adoptable-storage

Обновление: дальнейшие исследования показывают, что внешняя SD-карта существует, но разрешения xrw устанавливаются только для доступа пользователя (владельца) и группы. Другой доступ не имеет разрешений.

Использование chmod o+r не имеет никакого эффекта

generic_x86:/mnt # ls -al
total 0
drwxr-xr-x 10 root   system   220 2017-12-07 11:29 .
drwxrwxrwt 16 root   root     660 2017-12-07 11:29 ..
drwx--x--x  2 root   root      40 2017-12-07 11:29 appfuse
drwxr-xr-x  2 root   system    40 2017-12-07 11:29 asec
drwxrwx--x  2 system system    40 2017-12-07 11:29 expand
drwxr-x---  3 root   media_rw  60 2017-12-07 11:29 media_rw
drwxr-xr-x  2 root   system    40 2017-12-07 11:29 obb
drwx------  5 root   root     100 2017-12-07 11:29 runtime
lrwxrwxrwx  1 root   root      21 2017-12-07 11:29 sdcard -> /storage/self/primary
drwx------  3 root   root      60 2017-12-07 11:29 secure
drwxr-xr-x  3 root   root      60 2017-12-07 11:29 user
generic_x86:/mnt # cd media_rw
generic_x86:/mnt/media_rw # ls -al
total 0
drwxr-x---  3 root     media_rw  60 2017-12-07 11:29 .
drwxr-xr-x 10 root     system   220 2017-12-07 11:29 ..
drwxrwx---  3 media_rw media_rw 512 2017-12-07 11:29 12FE-0C07

Дальнейшее обновление:

Угадай, что

adb shell sm set-force-adoptable true

заставляет SD-карту отображаться как / storage / xxxx-xxxx.

переключатели для команды selinux sm:

   generic_x86:/ # sm /?
    usage: sm list-disks [adoptable]
           sm list-volumes [public|private|emulated|all]
           sm has-adoptable
           sm get-primary-storage-uuid
           sm set-force-adoptable [true|false]
           sm set-virtual-disk [true|false]
           sm partition DISK [public|private|mixed] [ratio]
           sm mount VOLUME
           sm unmount VOLUME
           sm format VOLUME
           sm benchmark VOLUME
           sm fstrim
           sm forget [UUID|all]
           sm set-emulate-fbe [true|false]
Другие вопросы по тегам