
Android obsługuje urządzenia z tradycyjną pamięcią masową, która jest zdefiniowana jako system plików bez rozróżniania wielkości liter z niezmiennymi klasami i trybami uprawnień POSIX. Pojęcie tradycyjnej pamięci masowej obejmuje pamięć emulowaną i przenośną. Pamięć przenośna jest definiowana jako dowolna pamięć zewnętrzna, która nie jest przyjęta przez system, a zatem nie jest sformatowana i zaszyfrowana ani powiązana z określonym urządzeniem. Ponieważ tradycyjna pamięć zewnętrzna zapewnia minimalną ochronę przechowywanych danych, kod systemowy nie powinien przechowywać poufnych danych w pamięci zewnętrznej. W szczególności pliki konfiguracyjne i dzienniki powinny być przechowywane tylko w pamięci wewnętrznej, gdzie mogą być skutecznie chronione.
Pamięć zewnętrzna dla wielu użytkowników
Począwszy od Androida 4.2, urządzenia mogą obsługiwać wielu użytkowników, a pamięć zewnętrzna musi spełniać następujące ograniczenia:
- Każdy użytkownik musi mieć własną wyizolowaną podstawową pamięć zewnętrzną i nie może mieć dostępu do podstawowej pamięci zewnętrznej innych użytkowników.
- Ścieżka
/sdcard
musi rozwiązać do poprawnego podstawowego magazynu zewnętrznego specyficznego dla użytkownika w oparciu o użytkownika, na którym działa proces. - Przechowywanie dużych plików OBB w katalogu
Android/obb
może być współużytkowane przez wielu użytkowników w ramach optymalizacji. - Dodatkowa pamięć zewnętrzna nie może być zapisywana przez aplikacje, z wyjątkiem katalogów specyficznych dla pakietu, na które zezwalają uprawnienia syntetyczne.
Domyślna implementacja platformy tej funkcji wykorzystuje przestrzenie nazw jądra systemu Linux do tworzenia izolowanych tabel montowań dla każdego procesu rozwidlonego Zygote, a następnie używa montowań powiązań, aby zaoferować właściwą podstawową zewnętrzną pamięć masową specyficzną dla użytkownika w tej prywatnej przestrzeni nazw.
Podczas rozruchu system montuje pojedynczego emulowanego demona FUSE zewnętrznej pamięci masowej w EMULATED_STORAGE_SOURCE
, który jest ukryty przed aplikacjami. Po rozwidleniu Zygote powiązanie montuje odpowiedni podkatalog specyficzny dla użytkownika z poziomu demona FUSE do EMULATED_STORAGE_TARGET
, aby ścieżki pamięci zewnętrznej zostały poprawnie rozwiązane dla aplikacji. Ponieważ aplikacja nie ma dostępnych punktów instalacji dla pamięci innych użytkowników, mogą oni uzyskać dostęp do pamięci tylko dla użytkownika, jako którego została uruchomiona.
Ta implementacja wykorzystuje również funkcję współdzielonego poddrzewa jądra do propagowania zdarzeń montowania z domyślnej głównej przestrzeni nazw do przestrzeni nazw aplikacji, co zapewnia, że funkcje, takie jak kontenery ASEC i montowanie OBB, będą nadal działać poprawnie. Robi to, montując rootfs jako współdzielony, a następnie ponownie montując go jako niewolnika po utworzeniu każdej przestrzeni nazw Zygote.
Wiele zewnętrznych urządzeń pamięci masowej
Począwszy od systemu Android 4.4, wiele zewnętrznych urządzeń magazynujących jest udostępnianych deweloperom za pośrednictwem Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
i Context.getObbDirs()
.
Uprawnienie WRITE_EXTERNAL_STORAGE
musi przyznawać dostęp do zapisu tylko do podstawowej pamięci zewnętrznej na urządzeniu. Nie wolno zezwalać aplikacjom na zapis na dodatkowych zewnętrznych urządzeniach pamięci masowej, z wyjątkiem katalogów specyficznych dla pakietu, na które zezwalają uprawnienia syntetyczne. Ograniczenie zapisu w ten sposób zapewnia, że system może wyczyścić pliki po odinstalowaniu aplikacji.
Obsługa nośników USB
Android 6.0 obsługuje przenośne urządzenia pamięci masowej, które są podłączone do urządzenia tylko przez krótki czas, takie jak dyski flash USB. Gdy użytkownik wstawia nowe urządzenie przenośne, platforma wyświetla powiadomienie, aby umożliwić mu skopiowanie lub zarządzanie zawartością tego urządzenia.
W systemie Android 6.0 każde urządzenie, które nie jest zaadoptowane, jest uważane za przenośne. Ponieważ przenośna pamięć masowa jest podłączona tylko przez krótki czas, platforma pozwala uniknąć ciężkich operacji, takich jak skanowanie nośników. Aplikacje innych firm muszą przejść przez platformę dostępu do pamięci masowej , aby wchodzić w interakcje z plikami w pamięci przenośnej; bezpośredni dostęp jest wyraźnie zablokowany ze względów prywatności i bezpieczeństwa.