Storage

Symbol für HAL für externen Android-Speicher

Android wurde im Laufe der Zeit weiterentwickelt, um eine Vielzahl von Speichergerätetypen und ‑funktionen zu unterstützen. Alle Android-Versionen unterstützen Geräte mit traditionellem Speicher, einschließlich tragbarer und emulierter Speicher. Tragbarer Speicher kann über physische Medien wie eine SD-Karte oder einen USB-Speicher bereitgestellt werden, die für die temporäre Datenübertragung und den Dateispeicher verwendet werden. Die physischen Medien können sich über einen längeren Zeitraum am Gerät befinden, sind aber nicht an das Gerät gebunden und können entfernt werden. SD-Karten sind seit Android 1.0 als mobiler Speicher verfügbar. Mit Android 6.0 wurde USB-Unterstützung hinzugefügt. Emulierter Speicher wird bereitgestellt, indem ein Teil des internen Speichers über eine Emulationsschicht freigegeben wird. Diese Funktion ist seit Android 3.0 verfügbar.

Ab Android 6.0 unterstützt Android adoptable storage, also Speicher, der von physischen Medien wie einer SD-Karte oder einem USB-Speicher bereitgestellt wird und verschlüsselt und so formatiert ist, dass er sich wie interner Speicher verhält. Auf einem adoptable storage können alle Arten von Anwendungsdaten gespeichert werden.

Berechtigungen

Der Zugriff auf den externen Speicher wird durch verschiedene Android-Berechtigungen geschützt. Ab Android 1.0 wird der Schreibzugriff mit der Berechtigung WRITE_EXTERNAL_STORAGE geschützt. Ab Android 4.1 ist der Lesezugriff mit der Berechtigung READ_EXTERNAL_STORAGE geschützt.

Ab Android 4.4 werden Inhaber, Gruppe und Modi von Dateien auf externen Speichergeräten jetzt basierend auf dem Verzeichnisstruktur synthetisiert. Dadurch können Anwendungen ihre paketspezifischen Verzeichnisse auf einem externen Speicher verwalten, ohne dass sie die umfassende Berechtigung WRITE_EXTERNAL_STORAGE haben müssen. Die App mit dem Paketnamen com.example.foo kann jetzt beispielsweise ohne Berechtigungen auf Android/data/com.example.foo/ auf externen Speichergeräten zugreifen. Diese synthetisierten Berechtigungen werden erreicht, indem Rohspeichergeräte in einem FUSE-Daemon verpackt werden.

Ab Android 10 verwenden Apps, die auf Android 9 und niedriger ausgerichtet sind, standardmäßig den bisherigen Speicher. Der isolierte Speicher kann aktiviert werden. Apps, die auf Android 10 ausgerichtet sind und standardmäßig den isolierten Speicher verwenden, können dies vorübergehend deaktivieren. Verwenden Sie das Manifestattribut requestLegacyExternalStorage, das das Speichermodell steuert, um den Standardstatus zu ändern.

Da sowohl die READ_EXTERNAL_STORAGE- als auch die WRITE_EXTERNAL_STORAGE-Berechtigung eingeschränkt ist, steuert die Berechtigung nur den Zugriff auf die audiovisuellen Sammlungen, wenn der Installateur die App nicht auf die Zulassungsliste gesetzt hat. Der Zugriff auf die SD-Karte ist nicht möglich. Das gilt auch dann, wenn die App den bisherigen Speicherplatz anfordert. Weitere Informationen sowohl zu festen als auch zu weichen Einschränkungen findest du unter Harte und weiche Einschränkungen in Android 10.

Wenn das Installationsprogramm die Berechtigung auf die weiße Liste gesetzt hat, erhält eine App, die im Legacy-Modus ausgeführt wird, das nicht isolierte Berechtigungsverhalten. Die Berechtigung steuert den Zugriff auf die SD-Karte sowie auf die audiovisuellen Sammlungen. Das ist der Fall, wenn die App entweder auf Android 9 oder niedriger ausgerichtet ist und der isolierte Speicher nicht aktiviert ist, oder auf Android 10 ausgerichtet ist und der isolierte Speicher deaktiviert ist.

Der Zulassungsstatus kann nur bei der Installation angegeben werden und kann erst geändert werden, wenn die App installiert wurde.

Weitere Informationen zum Festlegen der Berechtigung READ_EXTERNAL_STORAGE finden Sie unter setWhitelistedRestrictedPermissions() in der Klasse PackageInstaller.SessionParams.

Android 13 bietet detaillierte Medienberechtigungen zur Unterstützung von Anwendungen, die auf Mediendateien zugreifen, die von anderen Apps erstellt wurden. Anwendungen müssen statt der Berechtigung READ_EXTERNAL_STORAGE eine oder mehrere der detaillierten Medienberechtigungen anfordern, die unter Detaillierte Medienberechtigungen aufgeführt sind.

Android 14 baut auf detaillierten Medienberechtigungen auf, damit Nutzer Apps nur teilweisen Zugriff auf ihre visuelle Medienbibliothek gewähren können, wenn sie Medienberechtigungen anfordern. Weitere Informationen finden Sie unter Fotos und Videos für andere freigeben.

Laufzeitberechtigungen

Mit Android 6.0 wird ein neues Modell für Laufzeitberechtigungen eingeführt, bei dem Apps bei Bedarf zur Laufzeit Funktionen anfordern. Da das neue Modell die READ/WRITE_EXTERNAL_STORAGE-Berechtigungen enthält, muss die Plattform dynamisch Speicherzugriff gewähren, ohne bereits laufende Apps zu beenden oder neu zu starten. Dazu werden drei verschiedene Ansichten aller bereitgestellten Speichergeräte verwendet:

  • /mnt/runtime/default wird Apps ohne spezielle Speicherberechtigungen und dem Stamm-Namespace angezeigt, in dem adbd und andere Systemkomponenten gespeichert sind.
  • /mnt/runtime/read wird Apps mit READ_EXTERNAL_STORAGE angezeigt (LEGACY_STORAGE für Android 10 festlegen)
  • /mnt/runtime/write wird Apps mit WRITE_EXTERNAL_STORAGE angezeigt

Beim Zygote-Fork erstellen wir einen Bereitstellungs-Namespace für jede laufende App und binden die entsprechende anfängliche Ansicht an. Später, wenn Laufzeitberechtigungen gewährt werden, springt vold in den Bereitstellungs-Namespace bereits laufender Apps und bindet die aktualisierte Ansicht an. Hinweis: Downgrades von Berechtigungen führen immer dazu, dass die App beendet wird.

Für die Implementierung dieser Funktion ist mindestens Linux 3.8 erforderlich. Die Patches wurden jedoch erfolgreich auf Linux 3.4 zurückportiert.setns() Mit dem PermissionsHostTest-CTS-Test können Sie das korrekte Verhalten des Kernels prüfen.