
Android obsługuje urządzenia z tradycyjną pamięcią masową, która jest zdefiniowana jako system plików nierozróżniający wielkości liter z niezmiennymi klasami uprawnień i trybami POSIX. Pojęcie tradycyjnego miejsca na dane obejmuje emulowane i przenośne miejsce na dane. Przenośna pamięć masowa to dowolna zewnętrzna pamięć masowa, która nie jest adoptowana przez system, a zatem nie jest sformatowana ani zaszyfrowana ani nie jest powiązana z konkretnym urządzeniem. Ponieważ tradycyjna zewnętrzna pamięć masowa zapewnia minimalną ochronę przechowywanych danych, kod systemu nie powinien przechowywać danych wrażliwych na zewnętrznej pamięci masowej. W szczególności pliki konfiguracji i pliki dziennika powinny być przechowywane tylko w pamięci wewnętrznej, gdzie można je skutecznie chronić.
Pamięć zewnętrzna dla wielu użytkowników
Od Androida 4.2 urządzenia mogą obsługiwać wielu użytkowników, a pamięć zewnętrzna musi spełniać te ograniczenia:
- Każdy użytkownik musi mieć własną odseparowaną pamięć zewnętrzną i nie może mieć dostępu do zewnętrznej pamięci innych użytkowników.
- Ścieżka
/sdcard
musi wskazywać prawidłową pamięć zewnętrzną główną powiązaną z użytkownikiem, w którego imieniu działa proces. - Miejsce na duże pliki OBB w katalogu
Android/obb
może być udostępniane wielu użytkownikom w ramach optymalizacji. - Aplikacje nie mogą zapisywać danych na dodatkowym zewnętrznym urządzeniu pamięci, z wyjątkiem katalogów dotyczących pakietu, w których jest to dozwolone przez zsyntetyzowane uprawnienia.
Domyślne wdrożenie tej funkcji na platformie wykorzystuje przestrzenie nazw jądra systemu Linux do tworzenia izolowanych tabel montowania dla każdego procesu utworzonego przez Zygote, a następnie używa bind mountów, aby udostępnić odpowiednią podstawową pamięć zewnętrzną dla danego użytkownika w tej prywatnej przestrzeni nazw.
Podczas uruchamiania system montuje jeden emulowany zewnętrzny system plików FUSE na EMULATED_STORAGE_SOURCE
, który jest ukryty przed aplikacjami. Po utworzeniu przez Zygote fork bind mountuje odpowiedni podkatalog dla danego użytkownika z daemona FUSE do EMULATED_STORAGE_TARGET
, aby ścieżki zewnętrznego magazynu były poprawnie rozpoznawane przez aplikację. Ponieważ aplikacja nie ma dostępnych punktów mountowania dla magazynu innych użytkowników, może uzyskać dostęp tylko do magazynu dla użytkownika, z którego została uruchomiona.
Ta implementacja korzysta też z funkcji wspólnego poddrzewa jądra, aby rozpowszechniać zdarzenia montażu z domyślnej przestrzeni nazw głównej do przestrzeni nazw aplikacji. Dzięki temu funkcje takie jak kontenery ASEC i montaż OBB będą nadal działać prawidłowo. Robi to, montując rootfs jako współdzielony, a następnie ponownie montując go jako podrzędny po utworzeniu każdej przestrzeni nazw Zygote.
Wiele urządzeń pamięci zewnętrznej
Od Androida 4.4 deweloperzy mają dostęp do wielu urządzeń zewnętrznych za pomocą Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
i Context.getObbDirs()
.
Uprawnienie WRITE_EXTERNAL_STORAGE
musi zezwalać na zapisywanie tylko w przypadku głównego urządzenia do przechowywania danych na urządzeniu. Aplikacje nie mogą mieć uprawnień do zapisu na zewnętrznych urządzeniach pamięci podręcznej, z wyjątkiem katalogów pakietów, w których przypadku zezwala na to syntetyzowany zestaw uprawnień. Ograniczenie zapisu w taki sposób zapewnia, że system może usuwać pliki po odinstalowaniu aplikacji.
Obsługa multimediów USB
Android 6.0 obsługuje przenośne urządzenia pamięci, które są podłączone do urządzenia tylko przez krótki czas, np. pamięci flash USB. Gdy użytkownik podłączy nowe urządzenie przenośne, platforma wyświetli powiadomienie, które umożliwi mu skopiowanie zawartości tego urządzenia lub zarządzanie nią.
W Androidzie 6.0 każde urządzenie, które nie jest obsługiwane, jest uważane za przenośne. Ponieważ przenośne urządzenie do przechowywania danych jest podłączone tylko przez krótki czas, platforma nie wykonuje czasochłonnych operacji, takich jak skanowanie multimediów. Aplikacje innych firm muszą korzystać z platformy Storage Access Framework, aby wchodzić w interakcje z plikami w pamięci przenośnej. Ze względów związanych z prywatnością i bezpieczeństwem dostęp bezpośredni jest wyraźnie zablokowany.