Android, değişmez POSIX izin sınıfları ve modlarına sahip, büyük/küçük harfe duyarlı olmayan bir dosya sistemi olarak tanımlanan geleneksel depolamaya sahip cihazları destekler. Geleneksel depolama kavramı öykünülmüş ve taşınabilir depolamayı kapsar. Taşınabilir depolama, sistem tarafından benimsenmeyen ve bu nedenle biçimlendirilmeyen, şifrelenmeyen veya belirli bir cihaza bağlanmayan herhangi bir harici depolama olarak tanımlanır. Geleneksel harici depolama, depolanan veriler için minimum düzeyde koruma sağladığından, sistem kodu hassas verileri harici depolamada saklamamalıdır. Özellikle, yapılandırma ve günlük dosyaları yalnızca etkili bir şekilde korunabilecekleri dahili depolamada saklanmalıdır.
Çok kullanıcılı harici depolama
Android 4.2'den itibaren cihazlar birden fazla kullanıcıyı destekleyebilir ve harici depolamanın aşağıdaki kısıtlamaları karşılaması gerekir:
- Her kullanıcının kendi yalıtılmış birincil harici depolama birimine sahip olması ve diğer kullanıcıların birincil harici depolama alanına erişimi olmamalıdır.
-
/sdcard
yolu, işlemin çalıştığı kullanıcıya bağlı olarak kullanıcıya özel doğru birincil harici depolamaya çözümlenmelidir. -
Android/obb
dizinindeki büyük OBB dosyalarının depolanması, optimizasyon amacıyla birden fazla kullanıcı arasında paylaşılabilir. - İkincil harici depolama, sentezlenmiş izinlerin izin verdiği pakete özgü dizinler dışında uygulamalar tarafından yazılamaz olmalıdır.
Bu özelliğin varsayılan platform uygulaması, her Zygote çatallı işlem için yalıtılmış bağlama tabloları oluşturmak üzere Linux çekirdeği ad alanlarından yararlanır ve ardından bu özel ad alanına doğru kullanıcıya özel birincil harici depolamayı sunmak için bağlama bağlamalarını kullanır.
Önyükleme sırasında sistem, uygulamalardan gizlenen EMULATED_STORAGE_SOURCE
konumuna tek bir öykünülmüş harici depolama FUSE arka plan programı bağlar. Zygote çatallarından sonra, FUSE arka plan programının altından kullanıcıya özel uygun alt dizini EMULATED_STORAGE_TARGET
bağlar, böylece harici depolama yolları uygulama için doğru şekilde çözümlenir. Bir uygulamada diğer kullanıcıların depolama alanı için erişilebilir bağlama noktaları bulunmadığından, yalnızca başlatıldığı kullanıcı için depolama alanına erişebilirler.
Bu uygulama aynı zamanda montaj olaylarını varsayılan kök ad alanından uygulama ad alanlarına yaymak için paylaşılan alt ağaç çekirdeği özelliğini kullanır; bu, ASEC kapsayıcıları ve OBB montajı gibi özelliklerin doğru şekilde çalışmaya devam etmesini sağlar. Bunu, rootf'leri paylaşılan olarak monte ederek ve ardından her Zygote ad alanı oluşturulduktan sonra onu köle olarak yeniden monte ederek yapar.
Çoklu harici depolama aygıtları
Android 4.4'ten başlayarak, Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
ve Context.getObbDirs()
aracılığıyla birden çok harici depolama aygıtı geliştiricilere sunuluyor.
WRITE_EXTERNAL_STORAGE
izni yalnızca cihazdaki birincil harici depolama birimine yazma erişimi vermelidir. Sentezlenmiş izinlerin izin verdiği pakete özel dizinler dışında, uygulamaların ikincil harici depolama cihazlarına yazması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 bir süre için bağlanan taşınabilir depolama cihazlarını destekler. Bir kullanıcı yeni bir taşınabilir cihaz taktığında platform, bu cihazın içeriğini kopyalamasına veya yönetmesine olanak tanıyan bir bildirim görüntüler.
Android 6.0'da benimsenmeyen herhangi bir cihaz taşınabilir olarak kabul edilir. Taşınabilir depolama yalnızca kısa bir süre için bağlandığından platform, medya tarama gibi ağır işlemlerden kaçınır. Üçüncü taraf uygulamaların, taşınabilir depolama birimindeki dosyalarla etkileşim kurabilmesi için Depolama Erişimi Çerçevesinden geçmesi gerekir; doğrudan erişim, gizlilik ve güvenlik nedenleriyle açıkça engellenmiştir.