
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 Dateispeicherung vorgesehen sind. 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 Eigentümer, Gruppe und Modi von Dateien auf externen Speichergeräten jetzt basierend auf dem Verzeichnisstruktur synthetisiert. So können Apps ihre paketspezifischen Verzeichnisse im externen Speicher verwalten, ohne dass sie die umfassende Berechtigung WRITE_EXTERNAL_STORAGE
benötigen.
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 durch Einbetten von Rohspeichergeräten in einen FUSE-Daemon erreicht.
Ab Android 10 verwenden Apps, die auf Android 9 und niedriger ausgerichtet sind, standardmäßig den bisherigen Speicher. Der isolierte Speicher kann aktiviert werden.
Bei Apps, die auf Android 10 ausgerichtet sind und standardmäßig den isolierten Speicher verwenden, kann die Funktion vorübergehend deaktiviert werden. 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 zu strengen und flexiblen Einschränkungen finden Sie unter
Strenge und flexible Einschränkungen in Android 10.
Wenn der Installateur die Berechtigung auf die Zulassungsliste gesetzt hat, wird für eine App, die im bisherigen Modus ausgeführt wird, das nicht isolierte Berechtigungsverhalten verwendet. 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.
In Android 13 werden detaillierte Medienberechtigungen eingeführt, um Apps zu unterstützen, die auf von anderen Apps erstellte Mediendateien zugreifen. Apps müssen eine oder mehrere der detaillierten Medienberechtigungen anfordern, die unter
Detaillierte Medienberechtigungen aufgeführt sind, anstatt die Berechtigung READ_EXTERNAL_STORAGE
.
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
Berechtigungen zur Laufzeit eingeführt, bei dem Apps bei Bedarf Funktionen anfordern. Da das neue Modell die Berechtigungen READ/WRITE_EXTERNAL_STORAGE
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 demadbd
und andere Systemkomponenten gespeichert sind./mnt/runtime/read
wird Apps mitREAD_EXTERNAL_STORAGE
angezeigt (LEGACY_STORAGE
für Android 10 festlegen)/mnt/runtime/write
wird für Apps mitWRITE_EXTERNAL_STORAGE
angezeigt
Beim Zygote-Fork wird für jede laufende App ein Bereitstellungs-Namespace erstellt und die entsprechende anfängliche Ansicht wird bereitgestellt. Später, wenn Laufzeitberechtigungen gewährt werden, springt vold
in den Bereitstellungs-Namespace bereits laufender Apps und bindet die aktualisierte Ansicht an. Beachten Sie, dass ein Downgrade der Berechtigungen immer dazu führt, 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.