Android, çok çeşitli depolama cihazı türlerini ve özelliklerini desteklemek için zaman içinde gelişmiştir. Android'in tüm sürümleri, taşınabilir ve öykünülmüş depolamayı içeren geleneksel depolamaya sahip cihazları destekler. Taşınabilir depolama, geçici veri aktarımı/dosya depolaması için SD kart veya USB gibi fiziksel ortamlarla sağlanabilir. Fiziksel ortam, cihazda uzun süre kalabilir ancak cihaza bağlı değildir ve çıkarılabilir. SD kartlar, Android 1.0'dan beri taşınabilir depolama olarak mevcuttur; Android 6.0, USB desteği ekledi. Öykünülmüş depolama, dahili depolamanın bir kısmının bir öykünme katmanı aracılığıyla açığa çıkarılmasıyla sağlanır ve Android 3.0'dan beri mevcuttur.
Android 6.0'dan itibaren Android, SD kart veya USB gibi fiziksel ortamlar tarafından sağlanan, şifrelenmiş ve dahili depolama gibi davranacak şekilde biçimlendirilmiş , benimsenebilir depolamayı destekler. Kabul edilebilir depolama, her tür uygulama verisini depolayabilir.
İzinler
Harici depolamaya erişim, çeşitli Android izinleriyle korunmaktadır. Android 1.0'dan başlayarak, yazma erişimi
WRITE_EXTERNAL_STORAGE izniyle korunmaktadır. Android 4.1'den başlayarak, okuma erişimi
READ_EXTERNAL_STORAGE izniyle korunmaktadır.
Android 4.4'ten başlayarak, harici depolama aygıtlarındaki dosyaların sahibi, grubu ve modları artık dizin yapısına göre sentezleniyor. Bu, uygulamaların geniş
WRITE_EXTERNAL_STORAGE iznine sahip olmalarını gerektirmeden harici depolamadaki pakete özgü dizinlerini yönetmelerini sağlar. Örneğin,
com.example.foo paket adına sahip uygulama, artık harici depolama cihazlarında izinsiz olarak
Android/data/com.example.foo/ erişebilir. Bu sentezlenmiş izinler, ham depolama aygıtlarını bir FUSE arka plan programında sarmalayarak gerçekleştirilir.
Android 10'dan başlayarak, Android 9'u hedefleyen ve varsayılan olarak eski depolamayı azaltan uygulamalar ve yalıtılmış depolamayı etkinleştirebilir . Android 10'u hedefleyen ve varsayılan olarak yalıtılmış depolamayı kullanan uygulamalar , geçici olarak bundan vazgeçebilir . Varsayılan durumu değiştirmek için, depolama modelini denetleyen
requestLegacyExternalStorage manifest özniteliğini kullanın.
Hem
READ_EXTERNAL_STORAGE hem de
WRITE_EXTERNAL_STORAGE izinleri geçici olarak kısıtlandığından, yükleyici uygulamayı beyaz listeye almadıysa izin, SD karta erişim olmadan yalnızca işitsel ve görsel koleksiyonlara erişimi kontrol eder. Bu, uygulama eski depolamayı talep etse bile geçerlidir. Hem katı kısıtlamalar hem de esnek kısıtlamalar hakkında daha fazla bilgi için bkz. Android 10'daki katı ve esnek kısıtlamalar .
Yükleyici izni beyaz listeye eklediyse, eski modda çalışan bir uygulama yalıtılmamış izin davranışını alır. İzin, SD kart erişimini ve işitsel ve görsel koleksiyonları kontrol eder. Bu, uygulama Android 9 veya önceki bir sürümü hedefleyip izole depolamayı etkinleştirmediğinde veya Android 10'u hedefleyip devre dışı kaldığında gerçekleşir.
Beyaz liste durumu yalnızca yükleme sırasında belirtilebilir ve uygulama yüklenene kadar değiştirilemez.
READ_EXTERNAL_STORAGE iznini ayarlama hakkında daha fazla bilgi için, PackageInstaller.SessionParams sınıfındaki
setWhitelistedRestrictedPermissions() bakın.
Android 13, diğer uygulamalar tarafından oluşturulan medya dosyalarına erişen uygulamaları desteklemek için ayrıntılı medya izinleri sunar. Uygulamalar,
READ_EXTERNAL_STORAGE izni yerine Ayrıntılı ortam izinlerinde listelenen ayrıntılı ortam izinlerinden bir veya daha fazlasını talep etmelidir.
Çalışma zamanı izinleri
Android 6.0, uygulamaların çalışma zamanında ihtiyaç duyulduğunda yetenek talep ettiği yeni bir çalışma zamanı izin modeli sunar. Yeni model
READ/WRITE_EXTERNAL_STORAGE izinlerini içerdiğinden, platformun halihazırda çalışan uygulamaları sonlandırmadan veya yeniden başlatmadan dinamik olarak depolama erişimi sağlaması gerekir. Bunu, takılı tüm depolama aygıtlarının üç farklı görünümünü koruyarak yapar:
-
/mnt/runtime/defaultözel depolama izinleri olmayan uygulamalara ve
adbdile diğer sistem bileşenlerinin yaşadığı kök ad alanına gösterilir.
-
/mnt/runtime/read
READ_EXTERNAL_STORAGEile uygulamalarda gösterilir (Android 10 için
LEGACY_STORAGEolarak ayarlayın)
-
/mnt/runtime/write
WRITE_EXTERNAL_STORAGEile uygulamalara gösterilir
Zygote fork zamanında, çalışan her uygulama için bir mount ad alanı oluştururuz ve mount'u uygun ilk görünümü yerine bağlarız. Daha sonra, çalışma zamanı izinleri verildiğinde,
vold halihazırda çalışan uygulamaların bağlama ad alanına atlar ve bind, yükseltilmiş görünümü yerine bağlar. İzin düşürme işlemlerinin her zaman uygulamanın sonlandırılmasına neden olduğunu unutmayın.
Bu özelliği uygulamak için kullanılan
setns() işlevi en az Linux 3.8 gerektirir, ancak yamalar başarıyla Linux 3.4'e geri aktarılmıştır.
PermissionsHostTest CTS testi, doğru çekirdek davranışını doğrulamak için kullanılabilir.