Przechowywanie

Ikona HAL pamięci zewnętrznej Android

Android ewoluował z biegiem czasu, aby obsługiwać szeroką gamę typów i funkcji urządzeń pamięci masowej. Wszystkie wersje Android urządzeń pomocniczych z tradycyjnym przechowywania , który obejmuje przenośne i emulowane przechowywania. Przenośna pamięć masowa może być dostarczona przez nośnikach fizycznych, takich jak karty SD lub USB, który służy do tymczasowego przechowywania danych transferu / plików. Nośnik fizyczny może pozostawać w urządzeniu przez dłuższy czas, ale nie jest do niego przywiązany i może zostać usunięty. Karty SD są dostępne jako przenośna pamięć masowa od Androida 1.0; Android 6.0 dodał obsługę USB. Emulowane przechowywania jest przez poddanie części wewnętrznej pamięci przez warstwę emulacji i jest dostępny od Androida 3.0.

Zaczynając w Android 6.0, Android obsługuje adoptable magazyn , który jest dostarczany przez nośnikach fizycznych, takich jak karty SD lub USB, który jest szyfrowany i zachowywać się jak sformatowanej pamięci wewnętrznej. Przyjęta pamięć masowa może przechowywać wszystkie typy danych aplikacji.

Uprawnienia

Dostęp do pamięci zewnętrznej jest chroniony różnymi uprawnieniami Androida. Począwszy od Androida 1.0, zapis dostęp jest chroniony z WRITE_EXTERNAL_STORAGE zgody. Począwszy od Androida 4.1, odczyt dostęp jest chroniony z READ_EXTERNAL_STORAGE zgody.

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. Dzięki temu aplikacje do zarządzania ich specyficzne pakiet katalogów na zewnętrznej pamięci masowej bez konieczności posiadają szerokie WRITE_EXTERNAL_STORAGE zgody. Na przykład, aplikacja o nazwie Pakiet com.example.foo mogą teraz swobodnie uzyskać dostęp do Android/data/com.example.foo/ na zewnętrznych urządzeń pamięci masowej bez żadnych uprawnień. Te zsyntetyzowane uprawnienia są uzyskiwane przez owinięcie surowych urządzeń pamięci masowej w demona FUSE.

Począwszy od 10 Androida, aplikacje na Androida 9 i niższe domyślne do przechowywania Legacy, a może zdecydować się na pojedyncze przechowywania. Aplikacje na Androida 10 i domyślnie samodzielnie przechowywania może tymczasowo zrezygnować z niego. Użyj oczywisty atrybut requestLegacyExternalStorage , który kontroluje model pamięci, aby zmienić stan domyślny.

Ponieważ oba READ_EXTERNAL_STORAGE i WRITE_EXTERNAL_STORAGE uprawnienia są miękkie ograniczona, jeśli instalator nie białej listy aplikacji, Kontrola uprawnień dostępu tylko do słuchowych i wzrokowych zbiorów, bez dostępu do karty SD. Ma to zastosowanie nawet wtedy, gdy aplikacja żąda starszej pamięci. Aby uzyskać więcej informacji na temat obu twardych ograniczeń i miękkich ograniczeń znajduje twardych i miękkich ograniczeń w Androidzie 10 .

Jeśli instalator umieścił uprawnienie na białej liście, aplikacja działająca w starszym trybie uzyskuje zachowanie nieizolowanego uprawnienia. Uprawnienie kontroluje dostęp do karty SD oraz kolekcje dźwiękowe i wizualne. Dzieje się tak, gdy aplikacja jest przeznaczona na system Android 9 lub starszy i nie korzysta z izolowanej pamięci masowej lub jest przeznaczona na system Android 10 i z niej rezygnuje.

Stan białej listy można określić tylko podczas instalacji i nie można go zmienić, dopóki aplikacja nie zostanie zainstalowana.

Aby uzyskać więcej informacji na temat ustawiania READ_EXTERNAL_STORAGE gość, patrz setWhitelistedRestrictedPermissions() w PackageInstaller.SessionParams klasie.

Uprawnienia wykonawcze

Android 6.0 wprowadza nowe uprawnienia uruchomieniowe model, w którym aplikacje zażądać możliwości, gdy są potrzebne przy starcie. Ponieważ nowy model zawiera READ/WRITE_EXTERNAL_STORAGE uprawnienia, potrzeby dynamicznie udzielenia dostępu Storage Platform bez zabijania lub ponownym już uruchomione aplikacje. Robi to, zachowując trzy różne widoki wszystkich zamontowanych urządzeń pamięci masowej:

  • /mnt/runtime/default jest pokazany w aplikacjach bez specjalnych pozwoleń na składowanie, a do nazw root gdzie adbd i inne elementy systemu żyją.
  • /mnt/runtime/read jest pokazany w aplikacjach z READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE dla Androida 10)
  • /mnt/runtime/write jest pokazany aplikacjach WRITE_EXTERNAL_STORAGE

W czasie fork Zygote tworzymy przestrzeń nazw montowania dla każdej uruchomionej aplikacji i wiążemy montowanie odpowiedniego początkowego widoku na miejsce. Później, gdy uprawnienia są przyznawane uruchomieniowe, vold wskakuje do nazw Górze już uruchomionych aplikacji i wiązania wierzchowców uaktualniony widok na miejsce. Pamiętaj, że obniżenie uprawnień zawsze powoduje zabicie aplikacji.

setns() funkcjonalność wykorzystywane do realizacji tej funkcji wymaga co najmniej Linux 3.8, ale łatki zostały z powodzeniem przeniesione na Linuksa 3.4. PermissionsHostTest Test CTS mogą być wykorzystywane w celu sprawdzenia prawidłowego zachowania jądra.