Google 致力于为黑人社区推动种族平等。查看具体举措
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Depolama

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 taklit edilmiş depolama 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 ortam tarafından sağlanabilir. Fiziksel ortam, cihazda uzun bir süre kalabilir, ancak cihaza bağlı değildir ve çıkarılabilir. SD kartlar, Android 1.0'dan beri taşınabilir depolama alanı olarak mevcuttur; Android 6.0 USB desteği ekledi. Öykünülmüş depolama, bir öykünme katmanı aracılığıyla dahili depolamanın bir kısmının açığa çıkarılmasıyla sağlanır ve Android 3.0'dan beri mevcuttur.

Android 6.0'dan başlayarak, Android, dahili depolama gibi davranacak şekilde şifrelenmiş ve biçimlendirilmiş bir SD kart veya USB gibi fiziksel medya tarafından sağlanan, benimsenebilir depolamayı destekler. Kabul edilebilir depolama, her tür uygulama verisini depolayabilir.

İzinler

Harici depolamaya erişim, çeşitli Android izinleriyle korunmaktadır. Android 1.0'dan itibaren, yazma erişimi WRITE_EXTERNAL_STORAGE izniyle korunmaktadır. Android 4.1'den itibaren, okuma erişimi READ_EXTERNAL_STORAGE izniyle korunmaktadır.

Android 4.4'ten başlayarak, harici depolama cihazları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ını gerektirmeden, harici depolamada pakete özel dizinlerini yönetmelerine olanak tanır. Örneğin, com.example.foo paket adına sahip uygulama artık Android/data/com.example.foo/ harici depolama cihazlarında izinsiz olarak serbestçe erişebilir. Bu sentezlenmiş izinler, ham depolama cihazlarının bir FUSE arka plan programına sarılmasıyla gerçekleştirilir.

Android 10'dan itibaren, Android 9'u hedefleyen ve varsayılan olarak eski depolamaya göre 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 bu uygulamadan vazgeçebilir . Varsayılan durumu değiştirmek için depolama modelini kontrol eden requestLegacyExternalStorage bildirim niteliğini kullanın.

Hem READ_EXTERNAL_STORAGE hem de WRITE_EXTERNAL_STORAGE izinleri yazılımla kısıtlandığından, yükleyici uygulamayı beyaz listeye almadıysa, izin SD karta erişim olmadan yalnızca işitsel ve görsel koleksiyonlara erişimi kontrol eder. Bu, uygulama eski depolama alanı talep etse bile geçerlidir. Hem katı kısıtlamalar hem de geçici kısıtlamalar hakkında daha fazla bilgi için Android 10'da katı ve yazılım kısıtlamaları bölümüne bakın.

Yükleyici izni beyaz listeye aldıysa, eski modda çalışan bir uygulama izole edilmeyen 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 bir sürümünü hedeflediğinde ve yalıtılmış depolamayı seçmediğinde veya Android 10'u hedefleyip devre dışı bıraktığında gerçekleşir.

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, PackageInstaller.SessionParams sınıfındaki setWhitelistedRestrictedPermissions() bakın.

Çalışma zamanı izinleri

Android 6.0, uygulamaların çalışma zamanında ihtiyaç duyulduğunda yetenekler talep ettiği yeni bir çalışma zamanı izin modeli sunar. Yeni model READ/WRITE_EXTERNAL_STORAGE izinlerini içerdiğinden, platformun zaten çalışan uygulamaları sonlandırmadan veya yeniden başlatmadan dinamik olarak depolama erişimi vermesi gerekir. Bunu, tüm takılı depolama aygıtlarının üç farklı görünümünü koruyarak yapar:

  • /mnt/runtime/default , özel depolama izinleri olmayan uygulamalara ve adbd ve diğer sistem bileşenlerinin yaşadığı kök ad adbd .
  • /mnt/runtime/read ile uygulamalar gösterilir READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE Android 10)
  • /mnt/runtime/write , WRITE_EXTERNAL_STORAGE ile uygulamalara gösterilir

Zygote fork zamanında, çalışan her uygulama için bir bağlama ad alanı oluştururuz ve uygun ilk görünümü yerine bağlarız. Daha sonra, çalışma zamanı izinleri verildiğinde vold , zaten çalışan uygulamaların bağlama ad vold atlar ve yükseltilmiş görünümü yerine bağlar. İzin düşürmelerinin her zaman uygulamanın öldürülmesiyle sonuçlandığını unutmayın.

Bu özelliği uygulamak için kullanılan setns() işlevselliği en azından Linux 3.8'i gerektirir, ancak yamalar başarıyla Linux 3.4'e geri yüklenmiştir. PermissionsHostTest CTS testi, doğru çekirdek davranışını doğrulamak için kullanılabilir.