SDCardFS 弃用

SDCardFS 在搭载 Android 11 或更高版本并运行内核版本 5.4 或更高版本的设备上已弃用。在此类设备上, VTS 测试不允许挂载的文件系统列为 SDCardFS。搭载 Android 11 或更高版本但运行内核版本 4.19 或更低版本的设备可以继续使用 SDCardFS,但 Google 不提供额外支持。

在弃用之前,SDCardFS 提供了一种方法来控制对模拟内部存储和外部 SD 卡的访问,允许应用程序仅访问与其相关的数据。此外,它提供了一层不区分大小写,以及一些额外的存储跟踪。

SDCardFS 替换功能

SDCardFS 的替代品使用了几个 Linux 内核文件系统功能来实现类似的结果。不区分大小写由文件系统直接处理;这导致在区分大小写和不区分大小写的文件夹中查找时间几乎相同,从而消除了 SDCardFS 中大型文件夹的减速。 SDCardFS 为快速收集设置的存储数据而进行的配额跟踪现在是使用项目配额从用户空间配置的。在某些性能敏感的上下文中,目录被绑定安装在适当的位置。一个新的 FUSE 实现为直接文件系统访问提供了范围存储,主要是为了支持位置信息的编辑。

配置 SDCard 更换功能

要为没有 SDCardFS 的模拟存储启用项目配额和案例折叠,请从device.mk文件中的emulated_storage.mk继承:

$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)

仅对搭载 Android 11 或更高版本的设备执行此操作。

为什么要弃用 SDCardFS?

弃用 SDCardFS 有多种原因。

稳定

SDCardFS 存在几个关于区分大小写的竞争条件,以及一些关于低内存情况的问题。在大型目录中,不区分大小写的查找可能会相当慢,因为查找必须遍历较低的目录才能找到替代案例。同时访问上层和下层文件系统也会导致问题。

上游平价

SDCardFS 需要对 VFS 附加补丁以支持更改绑定挂载的选项。这些补丁会导致额外的工作来接受对这些区域的上游更改。 SDCardFS 的特性可以被上游组件复制,消除了这个痛点。

功能与 API 对等

在之前的 Android 版本中,作用域存储限制了对特定类型元数据的访问。通过 SDCardFS 的直接存储访问不支持这些范围存储功能。