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. İle Android desteği cihazlarının tüm sürümleri geleneksel depolama taşınabilir ve Taklit depolama içerir. Taşınabilir depolama geçici veri transferi / dosya depolama için bir SD kart veya USB gibi fiziksel medya 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. Emulated saklama bir benzetim tabakası içinden dahili bir depolama bölümünün maruz bırakılarak sağlanır, Android 3.0 yana kullanılmaktadır.

Android 6.0 başlayarak, Android destekler uyarlanamıyor depolama şifrelenir ve dahili depolama gibi davranmaya biçimlendirilmiş bir SD kart veya USB gibi fiziksel medya tarafından sağlanmaktadır. Kabul edilebilir depolama, her tür uygulama verisini depolayabilir.

izinler

Harici depolamaya erişim, çeşitli Android izinleriyle korunmaktadır. Android 1.0 başlayarak, yazma erişimi ile korunmaktadır WRITE_EXTERNAL_STORAGE izni. Android 4.1 başlayarak, okuma erişimi ile korunmaktadır READ_EXTERNAL_STORAGE izni.

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 da geniş tutmak gerektirmeden harici depolama üzerindeki paket özgü dizinleri yönetmek için uygulamalar sağlayan WRITE_EXTERNAL_STORAGE izni. Örneğin, paket adı ile uygulama com.example.foo artık serbestçe erişebilir Android/data/com.example.foo/ hayır izinlere sahip harici depolama aygıtlarında. Bu sentezlenmiş izinler, ham depolama aygıtlarını bir FUSE arka plan programı içine sararak gerçekleştirilir.

Android 10'da başlayarak, eski depoya bu hedefi Android 9 ve alt varsayılan uygulamaları ve izole depolama etkinleştirebilirsiniz. Uygulamalar hedef Android 10 ve izole depolama varsayılan geçici bunun dışında seçebilirler. Tezahür nitelik kullanın requestLegacyExternalStorage varsayılan durumunu değiştirmek için, depolama modelini kontrol eder.

Her iki yana READ_EXTERNAL_STORAGE ve WRITE_EXTERNAL_STORAGE izinler yumuşak kısıtlı yükleyici SD karta erişimi olmayan, beyaz liste uygulama yalnızca işitsel ve görsel koleksiyonlara izni denetimleri erişim olmasaydı vardır. Bu, uygulama eski depolama talep etse bile geçerlidir. Sert kısıtlamalar ve yumuşak kısıtlamalar hem hakkında daha fazla bilgi için bkz Sert ve Android 10'da 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.

Ayarlama hakkında daha fazla bilgi için READ_EXTERNAL_STORAGE izni, bakınız setWhitelistedRestrictedPermissions() içinde PackageInstaller.SessionParams sınıfında.

Çalışma zamanı izinleri

Android 6.0 tanıtır yeni çalışma zamanı izinleri zamanında gerektiğinde uygulamalarınızın yeteneklerini talep modeli. Yeni model içerdiğinden READ/WRITE_EXTERNAL_STORAGE izinler, öldürme veya zaten çalışan uygulamalar yeniden başlatmadan dinamik hibe depolama erişim platformu ihtiyaçlarını. Bunu, takılı tüm depolama aygıtlarının üç farklı görünümünü koruyarak yapar:

  • /mnt/runtime/default özel depolama izinlerine sahip uygulamalar gösterilmiştir ve kök ad alanına edilir adbd ve diğer sistem bileşenlerini yaşıyor.
  • /mnt/runtime/read ile uygulamalar gösterilir READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE Android 10)
  • /mnt/runtime/write ile uygulamalar gösterilir WRITE_EXTERNAL_STORAGE

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. Çalışma zamanı izinlerin Daha sonra, vold zaten çalışan uygulamalar ve bağlama bağlar yerine yükseltilmiş görünümü arasında monte ad içine atlar. İzin düşürme işlemlerinin her zaman uygulamanın öldürülmesine neden olduğunu unutmayın.

setns() bu özelliği uygulamak için kullanılan işlevler en azından Linux 3.8 gerektirir, ancak yamalar Linux 3.4 başarıyla backported edilmiştir. PermissionsHostTest CTS testi doğru çekirdek davranışını doğrulamak için kullanılabilir.