Android zaman içinde çok çeşitli depolama cihazı türlerini ve özelliklerini destekleyecek şekilde gelişti. Android'in tüm sürümleri, taşınabilir ve taklit depolama alanı da dahil olmak üzere geleneksel depolama alanı bulunan cihazları destekler. Taşınabilir depolama alanı, SD kart veya USB gibi geçici veri aktarımı/dosya depolama için kullanılan fiziksel medyalar tarafından sağlanabilir. Fiziksel medya uzun süre cihazda kalabilir ancak cihaza bağlı değildir ve kaldırılabilir. SD kartlar Android 1.0'dan beri taşınabilir depolama birimi olarak kullanılabilir. Android 6.0'ta USB desteği eklendi. Yapay zekayla taklit edilerek oluşturulan depolama alanı, dahili depolama alanının bir kısmının bir emülasyon katmanı aracılığıyla gösterilmesiyle sağlanır ve Android 3.0'tan beri kullanılabilir.
Android 6.0 sürümünden itibaren Android, SD kart veya USB gibi fiziksel medya tarafından sağlanan, şifrelenmiş ve dahili depolama gibi davranacak şekilde biçimlendirilen kabul edilebilir depolama alanını desteklemektedir. Kabul edilebilir depolama her tür uygulama verisini depolayabilir.
İzinler
Harici depolama alanına erişim, çeşitli Android izinleriyle korunur.
Android 1.0'dan itibaren yazma erişimi WRITE_EXTERNAL_STORAGE
izniyle korunur. Android 4.1'den itibaren okuma erişimi READ_EXTERNAL_STORAGE
izniyle korunur.
Android 4.4'ten itibaren, harici depolama cihazlarındaki dosyaların sahibi, grubu ve modları dizin yapısına göre birleştirilir. Bu sayede uygulamalar, genel WRITE_EXTERNAL_STORAGE
iznine sahip olmaları gerekmeden harici depolamadaki pakete özgü dizinleri yönetebilir.
Örneğin, paket adı com.example.foo
olan uygulama artık hiçbir izni olmayan harici depolama cihazlarında Android/data/com.example.foo/
uygulamasına serbestçe erişebilir. Bu sentezlenmiş izinler, ham depolama cihazları bir FUSE daemon'una sarmalanarak elde edilir.
Android 10'dan itibaren, Android 9 ve önceki sürümleri hedefleyen uygulamalar varsayılan olarak eski depolama alanını kullanır ve izole depolama alanını etkinleştirebilir.
Android 10'u hedefleyen ve varsayılan olarak ayrılmış depolama alanını kullanan uygulamalar, bu özelliği geçici olarak devre dışı bırakabilir. Varsayılan durumu değiştirmek için depolama modelini kontrol eden manifest requestLegacyExternalStorage
özelliğini kullanın.
Hem READ_EXTERNAL_STORAGE
hem de WRITE_EXTERNAL_STORAGE
izinleri yumuşak olarak kısıtlandığından, yükleyici uygulamayı beyaz listeye eklemediyse izin yalnızca işitsel ve görsel koleksiyonlara erişimi kontrol eder, SD karta erişim sağlamaz. Bu durum, uygulama eski depolama alanı talep etse bile geçerlidir. Hem katı hem de geçici kısıtlamalar hakkında daha fazla bilgi edinmek için
Android 10'daki katı ve hafif kısıtlamalar bölümüne bakın.
Yükleyici, izni beyaz listeye aldıysa eski modda çalışan bir uygulama, bağımsız olmayan izin davranışını alır. Bu izin, SD kart erişimini ve işitsel ve görsel koleksiyonları kontrol eder. Bu durum, uygulama Android 9 veya önceki bir sürümü hedefliyorsa ve izole depolama alanını etkinleştirmemişse ya da Android 10'u hedefliyorsa ve devre dışı bırakmışsa ortaya çıkar.
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
PackageLoader.SessionParams sınıfındaki
setWhitelistedRestrictedPermissions()
öğesine bakın.
Android 13, diğer uygulamalar tarafından oluşturulan medya dosyalarına erişen uygulamaları desteklemek için ayrıntılı medya izinlerini kullanıma sunar. Uygulamalar, READ_EXTERNAL_STORAGE
izni yerine
Ayrıntılı medya izinleri bölümünde listelenen ayrıntılı medya izinlerinden birini veya daha fazlasını istemelidir.
Android 14, uygulamalar medya izinleri istediğinde kullanıcıların görsel medya kitaplıklarına kısmi erişim izni vermesine olanak tanımak için ayrıntılı medya izinlerini temel alır. Daha fazla bilgi için Fotoğraf ve videolara kısmi erişim verme başlıklı makaleyi inceleyin.
Çalışma zamanı izinleri
Android 6.0, uygulamaların çalışma zamanında ihtiyaç duyduğunda özellik isteğinde bulunduğu yeni bir
çalışma zamanı izni modelini kullanıma sunar. Yeni model READ/WRITE_EXTERNAL_STORAGE
izinlerini içerdiğinden platformun, çalışan uygulamaları kapatmadan veya yeniden başlatmadan depolama erişimini dinamik olarak vermesi gerekir. Bunu, takılı tüm depolama cihazları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 bulunduğu kök ad alanına gösterilir./mnt/runtime/read
,READ_EXTERNAL_STORAGE
değerine sahip uygulamalara gösterilir (Android 10 içinLEGACY_STORAGE
değerini ayarlayın)/mnt/runtime/write
,WRITE_EXTERNAL_STORAGE
özelliğine sahip uygulamalara gösterilir
Zygote çatallanma zamanında, çalışan her uygulama için bir bağlama ad alanı oluşturur ve uygun ilk görünümü bağlama bağlarız. Daha sonra, çalışma zamanında izinler verildiğinde vold
, zaten çalışan uygulamaların bağlama ad alanına atlar ve yükseltilmiş görünümü bağlama bağlar. İzinlerin düşürülmesinin her zaman uygulamanın kapatılmasına neden olacağını unutmayın.
Bu özelliğin uygulanmasında kullanılan setns()
işlevi için en az Linux 3.8 gereklidir. Ancak yamalar, Linux 3.4'e başarıyla geri taşınmıştır. Doğru çekirdek davranışını doğrulamak için PermissionsHostTest
CTS testi kullanılabilir.