SDCardFS のサポート終了

SDCardFS は、Android 11 以降で起動し、カーネル バージョン 5.4 以降を実行するデバイスでは非推奨になりました。このようなデバイスでは、 VTS テストでは、SDCardFS としてリストされているマウントされたファイル システムは許可されません。 Android 11 以降で起動してもカーネル バージョン 4.19 以下を実行するデバイスは、引き続き SDCardFS を使用できますが、Google は追加のサポートを提供しません。

非推奨になる前に、SDCardFS はエミュレートされた内部ストレージと外部 SD カードへのアクセスを制御する方法を提供し、アプリがそれらに関連するデータのみにアクセスできるようにしていました。さらに、大文字と小文字を区別しないレイヤーと、追加のストレージ追跡も提供されました。

SDCardFS 代替機能

SDCardFS の代替では、いくつかの Linux カーネル ファイルシステム機能を使用して、同様の結果を実現します。大文字と小文字の区別はファイルシステムによって直接処理されます。これにより、大文字と小文字を区別するフォルダーと区別しないフォルダーで検索時間がほぼ同じになり、SDCardFS から大きなフォルダーの速度低下が解消されます。 SDCardFS が設定用のストレージ データを迅速に収集するために行っていたクォータ追跡は、プロジェクト クォータを使用してユーザースペースから設定されるようになりました。一部のパフォーマンス重視のコンテキストでは、ディレクトリは所定の場所にバインド マウントされます。新しい FUSE 実装は、主に位置情報の編集をサポートするために、ファイルシステムに直接アクセスするためのスコープ付きストレージを提供します。

SDCard 交換機能を構成する

Android 11 以降で起動されたデバイスで、SDCardFS を使用せずにエミュレートされたストレージのプロジェクト クォータとケース フォールディングを有効にするには、 device.mkファイルのemulated_storage.mkから継承します。

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

警告:ファイルシステムのネイティブの大文字と小文字の区別は、そのようなデバイスで使用されるファイルベースの暗号化設定と互換性がないため、Android 10 以前で起動されたデバイスではこれを実行しないでください。このようなデバイスでは SDCardFS を使用し続ける必要があります。

SDCardFS を廃止する理由

SDCardFS を非推奨にする理由はさまざまです。

安定性

SDCardFS には、大文字と小文字の区別に関するいくつかの競合状態や、メモリ不足の状況に関するいくつかの問題があります。大文字と小文字を区別しない検索は、別のケースを見つけるために下位ディレクトリを移動する必要があるため、大きなディレクトリではかなり遅くなる可能性があります。上位ファイルシステムと下位ファイルシステムに同時にアクセスすると、問題が発生する可能性があります。

アップストリームパリティ

SDCardFS では、バインド マウントのオプション変更をサポートするために、VFS に追加のパッチが必要です。これらのパッチにより、これらの領域に対するアップストリームの変更を受け入れるための追加作業が発生します。 SDCardFS の機能は上流のコンポーネントによって複製できるため、この問題点が解消されます。

API との機能同等性

Android の以前のリリースでは、スコープ ストレージは特定の種類のメタデータへのアクセスを制限していました。 SDCardFS を介した直接ストレージ アクセスは、これらの範囲指定されたストレージ機能をサポートしません。