具有 Android API 26 的外部 SD 卡

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

环境:

Android Studio 3.0.1。应用了所有最新补丁。 AVD Nexus 6,外部 SD 卡。

问题: 启动 AVD 后,浏览本地文件夹时,外部 SD 卡不会显示在 ESExplorer 中,也不会显示在我的应用程序新播放列表管理器中。

使用

adb shell
su
cd /storage
ls -al

显示

emulated
self

所以没有外部SD卡。

但是,使用新的文件应用程序,外部 SD 卡确实会显示。 另外,在请求访问 SD 卡时运行选取器(使用存储访问框架)

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

外部 SD 卡再次显示

我使用一个名为 MemoryStorage 的类(发布在本论坛上)探索了几个 selinux 级别选项

/proc/mounts 不返回外部 sdcard

/system/etc/vold.fstab 不存在

Google 是否再次更改了对外部 SD 卡的访问权限?

如何获取物理外置SD卡?

补充: SD 卡是文件系统的一部分,如下所示,其中 LOST.DIR 位于外部 SD 卡上

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:
android android-external-storage storage-access-framework
1个回答
2
投票

我发现了这个: 新的“SDCardFS”文件系统包装器

谷歌尚未正式对此发表任何言论,但显然 Android 8.0 支持名为“SDCardFS”的新文件系统包装器。也许这种说法太自以为是了——随着 8.0 升级,Google Pixel 和一些 Nexus 设备神奇地开始使用 SDCardFS,所以大概这意味着新的文件存储方案可供 AOSP 中的任何人使用。 XDA 的勇敢硬件黑客一直在跟踪实施进度,显然 SDCardFS 应该会显着减少访问 Android 共享数据存储所涉及的 I/O 开销。

参考:

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]
© www.soinside.com 2019 - 2024. All rights reserved.