
Android, geleneksel depolama alanına sahip cihazları destekler. Bu depolama alanı, sabit POSIX izin sınıfları ve modlarına sahip, büyük/küçük harf duyarlı olmayan bir dosya sistemi olarak tanımlanır. Geleneksel depolama alanı kavramı, taklit edilen ve taşınabilir depolama alanlarını kapsar. Taşınabilir depolama alanı, sistem tarafından benimsenmeyen ve bu nedenle biçimlendirilmeyen, şifrelenmeyen veya belirli bir cihaza bağlı olmayan harici depolama alanı olarak tanımlanır. Geleneksel harici depolama alanı, depolanan veriler için minimum düzeyde koruma sunduğundan sistem kodu, hassas verileri harici depolamada saklamamalıdır. Daha açık belirtmek gerekirse, yapılandırma ve günlük dosyaları yalnızca etkili bir şekilde korunabilecekleri dahili depolama alanında depolanmalıdır.
Çok kullanıcılı harici depolama alanı
Android 4.2'den itibaren cihazlar birden fazla kullanıcıyı destekleyebilir ve harici depolama alanı aşağıdaki kısıtlamaları karşılamalıdır:
- Her kullanıcının kendi izole birincil harici depolama alanı olmalıdır ve diğer kullanıcıların birincil harici depolama alanlarına erişimi olmamalıdır.
/sdcard
yolu, bir işlemin çalıştığı kullanıcıya göre doğru kullanıcıya özel birincil harici depolama alanına yönlendirmelidir.Android/obb
dizininde bulunan büyük OBB dosyalarının depolama alanı, optimizasyon amacıyla birden fazla kullanıcı arasında paylaşılabilir.- İkincil harici depolama alanı, sentezlenmiş izinlerin izin verdiği pakete özel dizinler dışında uygulamalar tarafından yazılabilir olmamalıdır.
Bu özelliğin varsayılan platform uygulaması, her Zygote çatallanmış işlemi için izole bağlama tabloları oluşturmak üzere Linux çekirdek ad alanlarından yararlanır ve ardından bu özel ad alanında kullanıcıya özel doğru birincil harici depolama alanını sunmak için bağlama bağlamalarını kullanır.
Sistem, önyükleme sırasında EMULATED_STORAGE_SOURCE
adresinde tek bir taklit edilmiş harici depolama FUSE daemon'ı bağlar. Bu daemon, uygulamalardan gizlenir. Zygote çatallanma işleminden sonra, harici depolama yolu uygulama için doğru şekilde çözülecek şekilde, FUSE daemon'unun altındaki kullanıcıya özel uygun alt dizini EMULATED_STORAGE_TARGET
'ye bağlar. Uygulamalar, diğer kullanıcıların depolama alanlarına erişebilen bağlama noktalarına sahip olmadığından yalnızca başlatıldıkları kullanıcının depolama alanına erişebilir.
Bu uygulama, varsayılan kök ad alanından uygulama ad alanlarına montaj etkinliklerini yaymak için paylaşılan alt ağaç çekirdek özelliğini de kullanır. Bu sayede ASEC kapsayıcıları ve OBB bağlama gibi özelliklerin düzgün şekilde çalışmaya devam etmesi sağlanır. Bunu rootfs'yi paylaşılan olarak bağlayarak ve her Zygote ad alanı oluşturulduktan sonra köle olarak yeniden bağlayarak yapar.
Birden fazla harici depolama cihazı
Android 4.4'ten itibaren, geliştiricilere Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
ve Context.getObbDirs()
aracılığıyla birden fazla harici depolama cihazı gösterilir.
WRITE_EXTERNAL_STORAGE
izni yalnızca cihazdaki birincil harici depolama alanına yazma erişimi vermelidir. Uygulamaların, sentezlenmiş izinlerin izin verdiği pakete özel dizinleri dışında ikincil harici depolama cihazlarına yazmalarına izin verilmemelidir. Yazma işlemlerinin bu şekilde kısıtlanması, uygulamalar kaldırıldığında sistemin dosyaları temizleyebilmesini sağlar.
USB medya desteği
Android 6.0, USB flash sürücüler gibi cihaza yalnızca kısa süre bağlı olan taşınabilir depolama cihazlarını destekler. Kullanıcı yeni bir taşınabilir cihaz taktığında platform, söz konusu cihazın içeriğini kopyalamasına veya yönetmesine olanak tanıyan bir bildirim gösterir.
Android 6.0'ta, benimsenmemiş tüm cihazlar taşınabilir olarak kabul edilir. Taşınabilir depolama alanı yalnızca kısa bir süre bağlı olduğundan platform, medya taraması gibi ağır işlemlerden kaçınır. Üçüncü taraf uygulamaları, taşınabilir depolama alanındaki dosyalarla etkileşimde bulunmak için Depolama Erişim Çerçevesi'ni kullanmalıdır. Gizlilik ve güvenlik nedeniyle doğrudan erişim açıkça engellenir.