
Android, değişmez POSIX izin sınıfları ve modları ile büyük/küçük harfe duyarsız 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çimlendirilmemiş, şifrelenmemiş veya belirli bir cihaza bağlı olmayan herhangi bir harici depolama olarak tanımlanır. Geleneksel harici depolama, depolanan veriler için minimum koruma sağladığından, sistem kodu, hassas verileri harici depolamada saklamamalıdır. Spesifik olarak, yapılandırma ve günlük dosyaları yalnızca etkin 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 deposuna sahip olması ve diğer kullanıcıların birincil harici depolamasına erişimi olmaması gerekir.
-
/sdcard
yolu, bir işlemin çalıştığı kullanıcıya bağlı olarak doğru kullanıcıya özel birincil harici depolamaya çözümlemelidir. -
Android/obb
dizinindeki büyük OBB dosyaları için depolama, optimizasyon olarak birden çok kullanıcı arasında paylaşılabilir. - İkincil harici depolama, 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 bir Zygote çatallı işlem için yalıtılmış bağlama tabloları oluşturmak üzere Linux çekirdek 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
tek bir öykünülmüş harici depolama FUSE arka plan programı bağlar. Zygote çatallanmasından sonra, harici depolama yollarının uygulama için doğru şekilde çözümlenmesi için FUSE arka plan programının altından uygun kullanıcıya özel alt dizini EMULATED_STORAGE_TARGET
. Bir uygulama, diğer kullanıcıların depolaması için erişilebilir bağlama noktalarına sahip olmadığından, yalnızca başlatıldığı kullanıcının depolama alanına erişebilir.
Bu uygulama ayrıca, varsayılan kök ad alanından uygulama ad alanlarına mount olaylarını 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 çalışmaya devam etmesini sağlar. Bunu, rootfs'u paylaşılan olarak monte ederek ve ardından her Zygote ad alanı oluşturulduktan sonra onu slave olarak yeniden monte ederek yapar.
Birden çok harici depolama aygıtı
Android 4.4'ten başlayarak, birden çok harici depolama aygıtı Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
ve Context.getObbDirs()
aracılığıyla geliştiricilere sunulur.
WRITE_EXTERNAL_STORAGE
izni, yalnızca bir cihazdaki birincil harici depolamaya yazma erişimi vermelidir. Uygulamaların, sentezlenmiş izinlerin izin verdiği pakete özel dizinler dışında, ikincil harici depolama cihazlarına yazmalarına izin verilmemelidir. Yazma işlemlerini bu şekilde kısıtlamak, 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, o cihazın içeriğini kopyalamasına veya yönetmesine izin vermek için bir bildirim gösterir.
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ğlı olduğundan, platform medya tarama gibi ağır işlemlerden kaçınır. Üçüncü taraf uygulamalar, taşınabilir depolama alanındaki dosyalarla etkileşim kurmak için Depolama Erişim Çerçevesinden geçmelidir; doğrudan erişim, gizlilik ve güvenlik nedenleriyle açıkça engellenmiştir.