Scoped Storage

Der eingeschränkte Speicher beschränkt den App-Zugriff auf externen Speicher. In Android 11 oder höher müssen Apps, die auf API 30 oder höher ausgerichtet sind, bereichsbezogenen Speicher verwenden. Zuvor konnten Apps in Android 10 den bereichsbezogenen Speicher deaktivieren.

App-Zugriffsbeschränkungen

Ziel der bereichsbezogenen Speicherung ist der Schutz der Privatsphäre von App- und Benutzerdaten. Dies umfasst den Schutz von Benutzerinformationen (wie Foto-Metadaten), das Verhindern, dass Apps Benutzerdateien ohne ausdrückliche Erlaubnis ändern oder löschen, und den Schutz sensibler Benutzerdokumente, die in Download- oder andere Ordner heruntergeladen werden.

Apps, die bereichsbezogenen Speicher verwenden, können die folgenden Zugriffsebenen haben (der tatsächliche Zugriff ist implementierungsspezifisch).

  • Lese- und Schreibzugriff auf ihre eigenen Dateien ohne Berechtigungen
  • Lesen Sie den Zugriff auf andere Anwendungen Mediendateien mit READ_EXTERNAL_STORAGE Erlaubnis
  • Schreibzugriff auf andere Anwendungen Mediendateien ist nur erlaubt , mit direktem Einwilligung des Nutzers (Ausnahmen gewährt im System Gallery und Anwendungen , die für alle Dateien Zugriff berechtigt sind)
  • Kein Lese- oder Schreibzugriff auf andere Anwendungen externe App - Datenverzeichnisse

Verwenden des bereichsbezogenen Speichers mit FUSE

Android 11 oder höher unterstützt Filesystem in Userspace (FUSE), das den MediaProvider Modul ermöglicht Dateioperationen im User - Space zu prüfen und Gate Zugriff auf Dateien auf der Politik basierten auf Zulassen, Abweisen oder Redact Zugang. Apps im Bereichsspeicher, die FUSE verwenden, erhalten die Datenschutzfunktionen des Bereichsspeichers und die Möglichkeit, über einen direkten Dateipfad auf Dateien zuzugreifen (wobei die Datei-APIs in Apps funktionieren).

Android 10 erzwingt bereichsbezogene Speicherregeln für Dateizugriffe durch MediaProvider, jedoch nicht für den direkten Dateipfadzugriff (z. Daher konnten Apps im bereichsbezogenen Speicher nicht über einen direkten Dateipfad auf Dateien zugreifen. Diese Einschränkung beeinträchtigte die Anpassungsfähigkeit der App-Entwickler, da erhebliche Codeänderungen erforderlich waren, um den Datei-API-Zugriff auf die MediaProvider-API umzuschreiben.

FUSE und SDCardFS

Android 11 Unterstützung für FUSE ist in keinem Zusammenhang mit der Abwertung von SDCardFS , sondern auch für Geräte eine Alternative zum Media Store bereitstellt , die zuvor SDCardFS verwendet. Geräte:

  • Beim Starten mit Android 11 oder höher mit Kernel 5.4 oder höher kann SDCardFS nicht verwendet werden.
  • Ein Upgrade auf Android 11 oder höher kann FUSE zusätzlich zu SDCardFS hosten, um die Dateivorgänge abzufangen und Datenschutzziele zu erfüllen.

FUSE-Leistungstuning

Android unterstützte FUSE zuvor in Android 7 oder niedriger, bei dem externer Speicher als FUSE bereitgestellt wurde. Aufgrund von Leistungs- und Deadlock-Problemen bei dieser FUSE-Implementierung führte Android 8 SDCardFS ein. Android 11 wieder einführt Unterstützung für FUSE mit einer verbesserten, besser bewährten Implementierung von libfuse , die abgestimmt werden können , um die Performance - Probleme in Android 7 oder senken zu lösen.

Das FUSE-Tuning umfasst die folgenden Optimierungen:

  • Umgehen FUSE für die Android/data und Android/obb Verzeichnisse Leistung für Spiele - Apps zu verbessern , die auf diese Verzeichnisse verlassen.
  • Optimierungen (z. B. das Abstimmen des Read-Ahead- und Dirty-Verhältnisses des FUSE-Dateisystems), um die Leseleistung und die Medienwiedergabe reibungslos zu halten.
  • Verwenden des FUSE-Write-Back-Cache.
  • Caching-Berechtigungen, um IPCs auf den Systemserver zu reduzieren.
  • Optimierungen für Apps mit Zugriff auf alle Dateien, um Massenvorgänge zu beschleunigen.

Die oben genannten Tuning-Optimierungen können eine vergleichbare Leistung zwischen FUSE- und Nicht-FUSE-Geräten erzielen. Beim Testen eines optimierten Pixel 2 mit FUSE und eines Pixel 2 mit Media Store wurde beispielsweise eine vergleichbare sequentielle Leseleistung (z. B. Videowiedergabe) zwischen Dateipfadzugriff und Media Store festgestellt. Allerdings waren sequenzielle Schreibvorgänge mit FUSE etwas schlechter, und zufällige Lese- und Schreibvorgänge konnten bis zu doppelt so langsam sein.

Leistungsmessungen können sich von Gerät zu Gerät und zwischen bestimmten Anwendungsfällen ändern. Da MediaProvider-APIs die konsistenteste Leistung bieten, sollten App-Entwickler, die sich um die Leistung sorgen, MediaProvider-APIs für ihre Apps verwenden.

Minderung der Auswirkungen auf die FUSE-Leistung

FUSE Auswirkungen auf die Leistung wird auf schwere Benutzer von Dateien beschränkt nur auf externen gemeinsam genutzten Speicher gespeichert. Externe private Lagerhaltung (inkl android/data und android/obb Verzeichnisse) von FUSE umgangen, während internen Speicher (wie /data/data , wo viele Anwendungen Daten speichern , zu halten , verschlüsselte und sicher) nicht FUSE montiert.

  • Apps, die leichte Benutzer von gemeinsam genutztem externem Speicher sind, interagieren oft mit einer begrenzten Anzahl von Dateien (normalerweise weniger als 100 Dateien). Diese Apps profitieren von bestehenden Optimierungen allgemeiner Lese- und Schreibvorgänge und sollten keine FUSE-bezogenen Leistungseinbußen in Android 11 haben.

  • Apps, die häufig gemeinsam genutzten externen Speicher verwenden, führen in der Regel Massendateivorgänge durch, z. B. das Auflisten oder Entfernen eines Verzeichnisses mit 1000 Dateien oder das Erstellen oder Löschen eines Verzeichnisses mit einer Million Dateien im Dateisystem. Bulk - Datei - Operationen könnten von FUSE auf Android 11 beeinflusst werden, aber wenn solche Anwendungen , die für die sind MANAGE_EXTERNAL_STORAGE Erlaubnis, profitieren sie von den Performance - Optimierungen im Update Oktober 2020 enthalten.

Um zu vermeiden , FUSE Performance - Overhead können Anwendungen speichern Daten in externem privaten Lagerung oder Verwendung Bulk - APIs in der ContentProvider Klasse Bypass FUSE und einen leistungsoptimierten Weg bekommen. Darüber hinaus enthält die Oktober 2020 Update auf die MediaProvider Systemkomponente Performance - Optimierungen für Datei - Manager und ähnliche Anwendungen (wie Backup / Restore, Anti - Virus), die die halten MANAGE_EXTERNAL_STORAGE Erlaubnis.

Datenschutz vor Leistung

Auf Geräten, die für FUSE optimiert wurden, sind die meisten kritischen User Journeys zwischen Android 10 und Android 11 gleich leistungsfähig. Beim Testen von Benchmarks über eine Reihe von Dateivorgängen kann Android 11 jedoch schlechter abschneiden als Android 10. Bei Dateizugriffsmustern, die leistungsfähig sind schlimmer in Android 11 (z. B. zufällige Lese- oder Schreibvorgänge), empfehlen wir die Verwendung von MediaProvider-APIs, um Apps einen Nicht-FUSE-Zugriffsmodus zu geben, der die beste und konstant leistungsfähigste Option ist.

MediaProvider- und FUSE-Updates

Die MediaProvider Systemkomponente Verhalten unterscheidet sich zwischen Android - Releases.

  • In Android 10 und niedriger war SDCardFS das Dateisystem und MediaProvider bot eine Schnittstelle zu Dateisammlungen (zum Beispiel Bilder, Videos, Musikdateien usw.). Wenn eine App eine Datei mit der Datei-API erstellt hat, kann sie MediaProvider bitten, die Datei zu scannen und in der Datenbank aufzuzeichnen.

  • In Android 11 oder höher, SDCardFS ist veraltet und MediaProvider wird die Dateisystem - Handler (für FUSE) für externe Speicher, um das Dateisystem auf externen Speichern machen und die MediaProvider Datenbank konsistent. Als Userspace-Handler für das FUSE-Dateisystem kann MediaProvider Kernel-Aufrufe abfangen und sicherstellen, dass die Dateioperationen sicher sind.

In Android 11 und höher, MediaProvider ist auch ein modularer Systemkomponente (a Mainline - Modul) , die außerhalb der Android Version aktualisiert werden können. Dies bedeutet, dass Leistungs-, Datenschutz- oder Sicherheitsprobleme in MediaProvider behoben und drahtlos über den Google Play Store oder andere von Partnern bereitgestellte Mechanismen bereitgestellt werden können. Alles im Rahmen dessen, was von einem FUSE-Handler erwartet wird, ist auch aktualisierbar, sodass Updates zur Behebung von FUSE-Leistungsrückgängen und Fehlern ermöglicht werden.