
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 veadbd
ile diğer sistem bileşenlerinin yaşadığı kök ad alanına gösterilir. -
/mnt/runtime/read
READ_EXTERNAL_STORAGE
ile uygulamalarda gösterilir (Android 10 içinLEGACY_STORAGE
olarak ayarlayın) -
/mnt/runtime/write
WRITE_EXTERNAL_STORAGE
ile 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.