2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
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 による直接ストレージ アクセスでは、この対象範囲別ストレージ機能がサポートされていません。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# SDCardFS deprecation\n\nSDCardFS is deprecated on devices that launch with Android 11 or higher and run kernel version 5.4 or higher. On such\ndevices, [VTS\ntesting](https://android.googlesource.com/platform/test/vts-testcase/kernel/+/refs/heads/android11-dev/sdcardfs/)\ndoesn't allow mounted file systems listed as SDCardFS. Devices that launch with\nAndroid 11 or higher but run kernel version 4.19 or\nlower can continue to use SDCardFS, but Google doesn't provide additional\nsupport.\n\nBefore its deprecation, SDCardFS provided a way to control access to emulated\ninternal storage and external SD cards, allowing apps to access only the data\nrelevant to them. Additionally, it provided a layer of case insensitivity, as\nwell as some additional storage tracking.\n\nSDCardFS replacement functionality\n----------------------------------\n\nThe replacement for SDCardFS uses several Linux kernel filesystem features to\nachieve similar results. Case insensitivity is handled directly by the\nfilesystem; this results in lookup times nearly identical in case-sensitive and\ncase-insensitive folders, removing the large folder slowdown from SDCardFS. The\nquota tracking that SDCardFS was doing to quickly gather storage data for\nsettings is now configured from userspace using project quotas. In some\nperformance-sensitive contexts, directories are bind mounted in place. A new\nFUSE implementation provides scoped storage for direct filesystem access,\nprimarily to support redaction of location information.\n\nConfigure SDCard replacement functionality\n------------------------------------------\n\nTo enable project quotas and case folding for emulated storage without SDCardFS\non a device that launched with Android 11 or higher,\ninherit from `emulated_storage.mk` in the `device.mk` file: \n\n $(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)\n\n**Warning:** Do *not* do this on devices\nthat launched with Android 10 or lower, since\nfilesystem native case-insensitivity is incompatible with the file-based\nencryption settings used on such devices. It is necessary to keep using SDCardFS\non such devices.\n\nReasons to deprecate SDCardFS\n-----------------------------\n\nThere are various reasons to deprecate SDCardFS.\n\n### Stability\n\nSDCardFS suffers from several race conditions concerning case sensitivity, as\nwell as some issues concerning low memory circumstances. Case-insensitive\nlookups can be rather slow in large directories because lookups have to walk the\nlower directory to find alternate cases. Accessing the upper and lower\nfilesystems at the same time can lead to issues as well.\n\n### Upstream parity\n\nSDCardFS requires additional patches to the VFS to support changing options on\nbind mounts. These patches cause additional work to accept upstream changes to\nthese areas. SDCardFS's features can be replicated by upstream components,\nremoving this pain point.\n\n### Feature parity with API\n\nIn the previous release of Android, scoped storage limited access to particular\ntypes of metadata. Direct storage access through SDCardFS doesn't support these\nscoped storage features."]]