Kapsamlı depolama, uygulamaların harici depolamaya erişimini sınırlar. Android 11 veya sonraki sürümlerde, API düzeyi 30 veya sonraki sürümleri hedefleyen uygulamalar kapsamlı depolama alanını kullanmalıdır. Android 10'da uygulamalar, kapsamlı depolamayı devre dışı bırakabiliyordu.
Uygulama erişimi kısıtlamaları
Kapsamlı depolamanın amacı, uygulama ve kullanıcı verilerinin gizliliğini korumaktır. Buna, kullanıcı bilgilerini (ör. fotoğraf meta verileri) koruma, uygulamaların kullanıcının açık izni olmadan kullanıcı dosyalarını değiştirmesini veya silmesini engelleme ve İndirilenler klasörüne ya da diğer klasörlere indirilen hassas kullanıcı dokümanlarını koruma dahildir.
Kapsamlı depolama alanını kullanan uygulamalar aşağıdaki erişim düzeylerine sahip olabilir (gerçek erişim, uygulamaya özeldir).
- Kendi dosyalarına izin olmadan okuma ve yazma erişimi
READ_EXTERNAL_STORAGEizniyle diğer uygulamaların medya dosyalarına okuma erişimi- Diğer uygulamaların medya dosyalarına yazma erişimi yalnızca doğrudan kullanıcı izniyle verilir (Sistem Galerisi ve tüm dosyalara erişim için uygun olan uygulamalara istisna tanınır).
- Diğer uygulamaların harici uygulama verileri dizinlerine okuma veya yazma erişimi yok
Kapsamlı depolama alanını FUSE ile kullanma
Android 11 veya sonraki sürümlerde, kullanıcı alanındaki dosya işlemlerinin MediaProvider modülü tarafından incelenmesini ve dosyalara erişimin izin verme, reddetme veya çıkarma politikasına göre kontrol edilmesini sağlayan Kullanıcı Alanında Dosya Sistemi (FUSE) desteklenir. Kapsamlı depolamada FUSE kullanan uygulamalar, kapsamlı depolamanın gizlilik özelliklerinden yararlanır ve doğrudan dosya yolu kullanarak dosyalara erişebilir (Dosya API'lerinin uygulamalarda çalışmaya devam etmesini sağlar).
Android 10, MediaProvider tarafından dosya erişimlerinde kapsamlı depolama kurallarını zorunlu kıldı ancak çekirdek çağrılarını engellemek için gereken çaba nedeniyle doğrudan dosya yolu erişimi (ör. File API ve NDK API'leri kullanılarak) için bu kurallar geçerli değildir. Sonuç olarak, kapsamlı depolamadaki uygulamalar doğrudan dosya yolu kullanarak dosyalara erişemiyordu. Bu kısıtlama, dosya API'si erişiminin MediaProvider API'ye yeniden yazılması için önemli kod değişiklikleri gerektirdiğinden uygulama geliştiricilerin uyum sağlama becerisini etkiledi.
FUSE ve SDCardFS
FUSE'un Android 11'de desteklenmesi, SDCardFS'nin desteğinin sonlandırılması ile ilgili değildir ancak daha önce SDCardFS kullanan cihazlarda Media Store'a alternatif olarak kullanılabilir. Cihazlar:
- Android 11 veya sonraki sürümlerle başlatılan ve 5.4 ya da sonraki bir çekirdek sürümünü kullanan cihazlarda SDCardFS kullanılamaz.
- Android 11 veya sonraki sürümlere yükseltme, dosya işlemlerini yakalamak ve gizlilik hedeflerini karşılamak için FUSE'u SDCardFS'nin üzerinde barındırabilir.
FUSE performans ayarı
Android daha önce Android 7 veya önceki sürümlerde FUSE'u destekliyordu. Bu sürümlerde harici depolama alanı FUSE olarak monte ediliyordu. Bu FUSE uygulamasındaki performans ve kilitlenme sorunları nedeniyle Android 8'de SDCardFS kullanıma sunuldu. Android 11, Android 7 veya daha eski sürümlerdeki performans sorunlarını çözmek için ayarlanabilen libfuse'nin geliştirilmiş ve daha iyi test edilmiş bir uygulamasını kullanarak FUSE desteğini yeniden sunar.
FUSE ayarlaması aşağıdaki ince ayarları içerir:
- Bu dizinlere dayanan oyun uygulamalarının performansını artırmak için
Android/dataveAndroid/obbdizinlerinde FUSE'u atlama. - Okuma işlemlerinin performanslı ve medya oynatmanın sorunsuz olması için optimizasyonlar (ör. FUSE dosya sisteminin önceden okuma ve kirli oranlarını ayarlama).
- FUSE write-back önbelleğini kullanma.
- Sistem sunucusuna yapılan IPC'leri azaltmak için önbelleğe alma izinleri.
- Toplu işlemleri daha hızlı hale getirmek için Tüm Dosyalar erişimi olan uygulamalara yönelik optimizasyonlar.
Yukarıdaki ayarlama ince ayarları, FUSE ve FUSE olmayan cihazlar arasında benzer performans sağlayabilir. Örneğin, FUSE kullanılarak ayarlanmış bir Pixel 2 ile Media Store kullanılarak ayarlanmış bir Pixel 2'nin test edilmesi sonucunda, dosya yolu erişimi ile Media Store arasında karşılaştırılabilir sıralı okuma performansı (ör. video oynatma) elde edildi. Ancak FUSE ile sıralı yazma işlemleri biraz daha kötüydü ve rastgele okuma ve yazma işlemleri iki kat daha yavaş olabiliyordu.
Performans ölçümleri cihazdan cihaza ve belirli kullanım alanları arasında değişiklik gösterebilir. MediaProvider API'leri en tutarlı performansı sağladığından performans konusunda endişeleri olan uygulama geliştiriciler, uygulamalarında MediaProvider API'lerini kullanmalıdır.
FUSE performans etkisini azaltma
FUSE performans etkisi yalnızca harici paylaşılan depolama alanında depolanan dosyaların yoğun kullanıcılarıyla sınırlıdır. Harici özel depolama alanı (android/data ve android/obb dizinleri dahil) FUSE tarafından atlanır. Dahili depolama alanı (ör. birçok uygulamanın verileri şifrelenmiş ve güvenli tutmak için depoladığı /data/data) ise FUSE'a bağlanmaz.
Paylaşılan harici depolama alanını az kullanan uygulamalar genellikle sınırlı bir dosya grubuyla (genellikle 100'den az dosya) etkileşim kurar. Bu uygulamalar, yaygın okuma ve yazma işlemlerinin mevcut optimizasyonlarından yararlanır ve Android 11'de FUSE ile ilgili herhangi bir performans etkisi görmez.
Paylaşılan harici depolama alanını yoğun olarak kullanan uygulamalar genellikle toplu dosya işlemleri gerçekleştirir. Örneğin, 1.000 dosya içeren bir dizini listeler veya kaldırır ya da dosya sisteminde bir milyon dosya içeren bir dizin oluşturur veya siler. Toplu dosya işlemleri, Android 11'de FUSE'den etkilenebilir. Ancak bu tür uygulamalar
MANAGE_EXTERNAL_STORAGEizni için uygunsa Ekim 2020 güncellemesinde yer alan performans optimizasyonlarından yararlanır.
FUSE performans ek yükünden kaçınmak için uygulamalar, verileri harici özel depolama alanında saklayabilir veya FUSE'u atlayıp performansı optimize edilmiş bir yol elde etmek için ContentProvider sınıfındaki toplu API'leri kullanabilir. Ayrıca, MediaProvider sistem bileşeninin Ekim 2020 güncellemesi, MANAGE_EXTERNAL_STORAGE iznine sahip dosya yöneticileri ve benzer uygulamalar (ör. yedekleme/geri yükleme, antivirüs) için performans optimizasyonları içerir.
Performanstan daha önemli olan gizlilik
FUSE için ayarlanmış cihazlarda, en önemli kullanıcı yolculuklarının çoğu Android 10 ile Android 11 arasında eşit performans gösterir. Ancak bir dizi dosya işlemi üzerinde karşılaştırma testleri yapılırken Android 11, Android 10'dan daha kötü performans gösterebilir. Android 11'de daha kötü performans gösteren dosya erişim kalıpları (ör. rastgele okuma veya yazma) için uygulamalara en iyi ve tutarlı performans gösteren seçenek olan FUSE dışı erişim modu sağlamak üzere MediaProvider API'lerini kullanmanızı öneririz.
MediaProvider ve FUSE güncellemeleri
MediaProvider sistem bileşeninin davranışı Android sürümleri arasında farklılık gösterir.
Android 10 ve önceki sürümlerde dosya sistemi SDCardFS, MediaProvider ise dosya koleksiyonları (ör. resimler, videolar, müzik dosyaları vb.) için bir arayüz sağlıyordu. Bir uygulama, File API'yi kullanarak dosya oluşturduğunda MediaProvider'dan dosyayı taramasını ve veritabanına kaydetmesini isteyebiliyordu.
Android 11 veya sonraki sürümlerde SDCardFS desteği sonlandırıldı ve harici depolama için dosya sistemi işleyici (FUSE için) MediaProvider oldu. Bu sayede, harici depolama alanındaki dosya sistemi ile MediaProvider veritabanı tutarlı hale geldi. MediaProvider, FUSE dosya sistemi için kullanıcı alanı işleyicisi olarak çekirdek çağrılarını engelleyebilir ve dosya işlemlerinin gizlilik açısından güvenli olmasını sağlayabilir.
Android 11 ve sonraki sürümlerde MediaProvider, Android sürümleri dışında güncellenebilen bir modüler sistem bileşenidir (Mainline modülü). Bu sayede, MediaProvider'da bulunan performans, gizlilik veya güvenlik sorunları Google Play Store'dan ya da diğer iş ortakları tarafından sağlanan mekanizmalar üzerinden kablosuz olarak düzeltilip dağıtılabilir. FUSE işleyiciden beklenenler kapsamındaki her şey de güncellenebilir. Bu sayede, FUSE performansındaki gerilemeleri ve hataları düzeltmek için güncellemeler yapılabilir.