Depolamak

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Android harici depolama HAL simgesi

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 ortamlar tarafından 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, bir öykünme katmanı aracılığıyla dahili depolamanın bir bölümünün 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ş, uyarlanabilir depolamayı destekler. Kabul edilebilir depolama, her tür uygulama verisini depolayabilir.

izinler

Harici depolamaya erişim, çeşitli Android izinleriyle korunmaktadır. Android 1.0'dan başlayarak, 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 başlayarak, harici depolama aygıtlarındaki dosyaların sahibi, grubu ve modları artık dizin yapısına göre sentezlenmektedir. Bu, uygulamaların geniş WRITE_EXTERNAL_STORAGE iznine sahip olmalarına gerek kalmadan harici depolamadaki pakete özel dizinlerini yönetmelerini sağlar. Örneğin, paket adı com.example.foo olan uygulama artık izinsiz olarak harici depolama cihazlarında Android/data/com.example.foo/ 'ya ücretsiz olarak erişebilir. Bu sentezlenmiş izinler, ham depolama aygıtlarını bir FUSE arka plan programı içine sararak gerçekleştirilir.

Android 10'dan başlayarak, Android 9'u hedefleyen ve varsayılan olarak eski depolamaya daha düşük olan ve yalıtılmış depolamayı seçebilen uygulamalar . Android 10'u hedefleyen ve varsayılan olarak yalıtılmış depolamayı hedefleyen uygulamalar, geçici olarak devre dışı bırakabilir . Varsayılan durumu değiştirmek için depolama modelini kontrol eden requestLegacyExternalStorage bildirim özniteliğini kullanın.

Hem READ_EXTERNAL_STORAGE hem de WRITE_EXTERNAL_STORAGE izinleri geçici olarak kısıtlanmış olduğundan, yükleyici uygulamayı beyaz listeye almadıysa, izin SD karta erişim olmaksızın yalnızca işitsel ve görsel koleksiyonlara erişimi kontrol eder. Bu, uygulama eski depolama talep etse bile geçerlidir. Hem katı kısıtlamalar hem de geçici kısıtlamalar hakkında daha fazla bilgi için bkz . Android 10'da Sabit ve yumuşak kısıtlamalar .

Yükleyici izni beyaz listeye eklediyse eski modda çalışan bir uygulama izole edilmemiş 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 sürümleri hedeflediğinde ve yalıtılmış depolamayı etkinleştirmediğinde veya Android 10'u hedefleyip devre dışı bıraktığında gerçekleşir.

Beyaz liste durumu yalnızca yükleme sırasında belirlenebilir 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() konusuna bakın.

Çalışma zamanı izinleri

Android 6.0, uygulamaların çalışma zamanında gerektiğinde yetenekler talep ettiği yeni bir çalışma zamanı izinleri modeli sunar. Yeni model READ/WRITE_EXTERNAL_STORAGE izinlerini içerdiğinden, platformun halihazırda çalışan uygulamaları öldürmeden veya yeniden başlatmadan dinamik olarak depolama erişimi vermesi 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 ve adbd ile diğer sistem bileşenlerinin bulunduğu kök ad alanına gösterilir.
  • /mnt/runtime/read , READ_EXTERNAL_STORAGE içeren uygulamalara gösterilir (Android 10 için LEGACY_STORAGE ayarlayın)
  • /mnt/runtime/write , WRITE_EXTERNAL_STORAGE ile uygulamalara gösterilir

Zygote çatal zamanında, çalışan her uygulama için bir mount ad alanı yaratırız ve uygun ilk görünümü yerine bağlamayı bağlarız. Daha sonra, çalışma zamanı izinleri verildiğinde, vold halihazırda çalışan uygulamaların mount ad alanına atlar ve bind, yükseltilmiş görünümü yerine yerleştirir. İzin düşürme işlemlerinin her zaman uygulamanın öldürülmesine 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.