SDCardFS のサポート終了

Android 11 以降を搭載し、カーネル バージョン 5.4 以降が稼働しているデバイスでは、SDCardFS のサポートを終了しました。このようなデバイスの VTS テストでは、SDCardFS と記載されたファイル システムのマウントはできません。Android 11 以降を搭載し、カーネル バージョン 4.19 以前が稼働しているデバイスでは、SDCardFS を引き続き使用できますが、追加のサポートは提供されません。

サポートが提供されていたときには、エミュレートされた内部ストレージと外部 SD カードへのアクセスを制御する手段を SDCardFS が提供し、アプリが関連データにのみアクセスできるようにしていました。さらに、大文字と小文字を区別しないレイヤと、追加のストレージ トラッキング機能も提供していました。

SDCardFS の代替機能

Linux カーネルのファイル システム機能が、SDCardFS と同様の結果を得るために使用されます。大文字と小文字を区別しない処理が、ファイル システムで直接行われます。これにより、大文字と小文字が区別されるフォルダと区別されないフォルダの検索時間がほぼ同じになり、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 による直接ストレージ アクセスでは、この対象範囲別ストレージ機能がサポートされていません。