Android ewoluował z biegiem czasu, aby obsługiwać szeroką gamę typów i funkcji urządzeń pamięci masowej. Wszystkie wersje urządzeń z Androidem obsługują tradycyjną pamięć masową , która obejmuje pamięć przenośną i emulowaną. Przenośną pamięć masową można zapewnić za pomocą nośnika fizycznego, takiego jak karta SD lub USB, służącego do tymczasowego przesyłania danych/ przechowywania plików. Nośnik fizyczny może pozostać w urządzeniu przez dłuższy czas, ale nie jest przywiązany do urządzenia i można go usunąć. Karty SD są dostępne jako przenośna pamięć masowa od wersji Androida 1.0; W systemie Android 6.0 dodano obsługę USB. Emulowana pamięć jest dostępna poprzez udostępnienie części pamięci wewnętrznej przez warstwę emulacji i jest dostępna od wersji Androida 3.0.
Począwszy od wersji Androida 6.0, Android obsługuje adaptowalną pamięć masową zapewnianą przez nośniki fizyczne, takie jak karta SD lub USB, które są szyfrowane i sformatowane tak, aby zachowywały się jak pamięć wewnętrzna. Pamięć adaptowalna może przechowywać wszystkie typy danych aplikacji.
Uprawnienia
Dostęp do pamięci zewnętrznej jest chroniony różnymi uprawnieniami systemu Android. Począwszy od Androida 1.0, dostęp do zapisu jest chroniony uprawnieniem WRITE_EXTERNAL_STORAGE
. Począwszy od Androida 4.1, dostęp do odczytu jest chroniony uprawnieniem READ_EXTERNAL_STORAGE
.
Począwszy od Androida 4.4, właściciel, grupa i tryby plików na zewnętrznych urządzeniach pamięci masowej są teraz syntetyzowane na podstawie struktury katalogów. Umożliwia to aplikacjom zarządzanie katalogami specyficznymi dla pakietów w pamięci zewnętrznej bez konieczności posiadania szerokiego uprawnienia WRITE_EXTERNAL_STORAGE
. Na przykład aplikacja o nazwie pakietu com.example.foo
może teraz swobodnie uzyskiwać dostęp do Android/data/com.example.foo/
na zewnętrznych urządzeniach pamięci masowej bez uprawnień. Te zsyntetyzowane uprawnienia są realizowane poprzez opakowanie surowych urządzeń pamięci masowej w demona FUSE.
Począwszy od Androida 10, aplikacje przeznaczone na Androida 9 i starsze wersje domyślnie korzystają ze starszej pamięci masowej i mogą zdecydować się na izolowaną pamięć masową. Aplikacje przeznaczone dla systemu Android 10 i domyślnie korzystające z izolowanej pamięci masowej mogą tymczasowo z niej zrezygnować . Użyj atrybutu manifestu requestLegacyExternalStorage
, który kontroluje model magazynu, aby zmienić stan domyślny.
Ponieważ zarówno uprawnienia READ_EXTERNAL_STORAGE
, jak i WRITE_EXTERNAL_STORAGE
są ograniczone programowo, jeśli instalator nie umieścił aplikacji na białej liście, uprawnienie kontroluje dostęp tylko do kolekcji dźwiękowych i wizualnych, bez dostępu do karty SD. Dotyczy to nawet sytuacji, gdy aplikacja żąda starszej pamięci. Aby uzyskać więcej informacji na temat ograniczeń twardych i miękkich, zobacz Twarde i miękkie ograniczenia w systemie Android 10 .
Jeśli instalator umieścił to uprawnienie na białej liście, aplikacja działająca w starszym trybie otrzyma zachowanie nieizolowanego uprawnienia. Uprawnienie kontroluje dostęp do karty SD oraz zbiory dźwiękowe i wizualne. Dzieje się tak, gdy aplikacja jest przeznaczona dla systemu Android 9 lub starszego i nie włącza izolowanego miejsca na dane lub jest przeznaczona dla systemu Android 10 i rezygnuje z tej opcji.
Stan białej listy można określić tylko w czasie instalacji i nie można go zmienić, dopóki aplikacja nie zostanie zainstalowana.
Aby uzyskać więcej informacji na temat ustawiania uprawnienia READ_EXTERNAL_STORAGE
, zobacz setWhitelistedRestrictedPermissions()
w klasie PackageInstaller.SessionParams .
W systemie Android 13 wprowadzono szczegółowe uprawnienia do multimediów umożliwiające obsługę aplikacji uzyskujących dostęp do plików multimedialnych utworzonych przez inne aplikacje. Aplikacje muszą żądać co najmniej jednego szczegółowego uprawnienia do multimediów wymienionego w części Szczegółowe uprawnienia do multimediów zamiast uprawnienia READ_EXTERNAL_STORAGE
.
Android 14 opiera się na szczegółowych uprawnieniach do multimediów , aby umożliwić użytkownikom częściowy dostęp do biblioteki multimediów wizualnych, gdy aplikacje żądają uprawnień do multimediów. Aby uzyskać więcej informacji, zobacz Przyznawanie częściowego dostępu do zdjęć i filmów .
Uprawnienia wykonawcze
W systemie Android 6.0 wprowadzono nowy model uprawnień w czasie wykonywania , w którym aplikacje żądają możliwości, gdy są potrzebne w czasie działania. Ponieważ nowy model zawiera uprawnienia READ/WRITE_EXTERNAL_STORAGE
, platforma musi dynamicznie przyznawać dostęp do pamięci bez przerywania lub ponownego uruchamiania już działających aplikacji. Robi to poprzez zachowanie trzech odrębnych widoków wszystkich zamontowanych urządzeń pamięci masowej:
-
/mnt/runtime/default
jest wyświetlany aplikacjom bez specjalnych uprawnień do przechowywania danych oraz głównej przestrzeni nazw, w której znajduje sięadbd
i inne komponenty systemu. -
/mnt/runtime/read
jest pokazywany aplikacjom zREAD_EXTERNAL_STORAGE
(ustawLEGACY_STORAGE
dla Androida 10) -
/mnt/runtime/write
jest wyświetlany aplikacjom z funkcjąWRITE_EXTERNAL_STORAGE
W czasie rozwidlenia Zygote tworzymy przestrzeń nazw montowania dla każdej działającej aplikacji i wiążemy montowanie odpowiedniego widoku początkowego na miejscu. Później, gdy zostaną przyznane uprawnienia wykonawcze, vold
wskakuje do przestrzeni nazw montowania już działających aplikacji i bind montuje zaktualizowany widok na swoim miejscu. Pamiętaj, że obniżenie uprawnień zawsze powoduje zamknięcie aplikacji.
Funkcja setns()
używana do implementacji tej funkcji wymaga co najmniej Linuksa 3.8, ale poprawki zostały pomyślnie przeniesione do Linuksa 3.4. Testu PermissionsHostTest
CTS można użyć do sprawdzenia prawidłowego zachowania jądra.