Android Q'daki Kapsamlı Depolama, geliştiricileri SAF kullanmaya zorluyor ki bu da berbat

Android Q'daki Kapsamlı Depolama değişiklikleri başa çıkılması gereken bir baş ağrısı çünkü Depolama Erişim Çerçevesinde şu anda birkaç kusur var.

Android Q, telefonunuzda depolamanın çalışma şeklini temelden değiştiriyor. Pie'a kadar olan her sürümde, Android'in depolama alanı bir masaüstü bilgisayar gibi çalışıyordu: İstediğiniz herhangi bir uygulamayı kullanabilir, herhangi bir dosyayı okuyabilir veya yazabilirsiniz (bir uygulamaya bunu yapması için izin verirseniz). Google, Q'yu tanıtıyor (ve zorunlu kılıyor) "Kapsamlı Depolama"Bu, depolamanın her uygulamaya ayrıldığı Android'in daha çok bir iPhone gibi çalışmasını sağlar. Bir uygulama yalnızca kendi dosyalarına erişebilir ve uygulama kaldırılırsa tüm dosyaları silinir.

Neyse ki Android Q, Android'in orijinal merkezi dosya sistemi davranışının bir kısmını hâlâ koruyor. Ne yazık ki, kullanıcının buna erişmek için uygulamaları ayarlaması artık zahmetli hale geldi ve performans ve yetenek önemli ölçüde azaldı. Ve geliştiricilerin bunu desteklemek için uygulamaları büyük ölçüde yeniden kodlaması gerekecek.

Genel dosya sistemi erişimine ihtiyaç duyan uygulamalar, ör. bir ofis paketinin, resim düzenleyicinin veya dosya yöneticisinin artık "" adı verilen bir Android API kullanması gerekecekDepolama Erişim Çerçevesi" (SAF), tüm dosya işlemleri için. SAF, Android 5.0 Lollipop'tan beri mevcuttur, ancak geliştiriciler, zor ve zayıf bir yapıya sahip olduğundan, gerekmedikçe onu kullanmama eğilimindedir. belgelenmiş API, zayıf kullanıcı deneyimi, düşük performans ve zayıf güvenilirlik (büyük ölçüde cihaz satıcısına özel uygulama biçiminde) sorunlar). SAF'ye geçişin zorluğunun bir sonucu olarak Google, henüz SAF'yi belirtmeyen uygulamalara izin vermeye karar verdi. Android Q desteği eskisi gibi çalışacak, ancak Play Store tüm uygulamaların Q'yu desteklemesini gerektirdiğinde bu durum değişecek gelecek yıl.

SAF ile kullanıcının karşılaştığı en belirgin değişiklik, bir uygulamaya depolama alanına erişim izni verme deneyimidir. Bir uygulamanın erişebilmesi için işletim sistemine bir istekte bulunur ve ardından bir dizin seçme ekranı görüntülenir. Bu ekranda kullanıcı, uygulamanın dosyaları okuyabileceği ve yazabileceği klasör hiyerarşisinin kökünü seçer. Kullanıcının, yerel dosyalara erişim gerektiren her uygulama için veya harici bir SD karta erişim izni vermesi gerekiyorsa uygulama başına iki kez bu işlemi gerçekleştirmesi gerekir.

Google en azından bu süreci iyileştirdi Q beta 3, önceki beta sürümlerde bir uygulamanın kullanıcıya seçebileceği bir konum önermesine bile izin verilmiyordu. kullanıcının oldukça fazla iş yapmasını gerektiriyordu aslında cihazlarının birincil depolama alanını bulmak için.

Dosya G/Ç performansı SAF altında bir miktar darbe alır, ancak en göze çarpan sorun dosyada yatmaktadır dizin işlemleri, burada mümkün olan geleneksel dosya erişiminden ~25 ila 50 kat daha yavaştır Turta. Dosya yöneticileri söz konusu olduğunda bu, aramaların ve depolama kullanımı hesaplamalarının gerçekleştirilmesinin çok daha uzun süreceği anlamına gelir. Gösteri uygulaması içeren bir hata raporu burada mevcut.

SAF ile geleneksel dosya G/Ç API'si arasındaki performans farkını gösteren SAFTest'in örnek test çalıştırması.

Daha da büyük bir performans sorunu, bazı uygulamaların, dosyaları onlarla çalışabilmeleri için önce yerel "kapsamlı depolama" alanlarına kopyalamak zorunda kalacak olmasıdır. Bu tür dosyaların boyutu birden fazla gigabayt olduğunda bu sorun yaratabilir; video dosyaları veya sıkıştırılmış arşivler durumunda. Pek çok Android uygulaması, geliştirici topluluğundaki inanılmaz sayıdaki açık kaynaklı Java kitaplıklarından yararlanır ve bu kitaplıkların çalışması için genellikle doğrudan dosya sistemi erişimi gerekir. Bunlar Android'e özgü değildir ve SAF ile çalışması için yeniden yazılması gerekir. Daha da kötüsü, paket yöneticisi veya zip API'si gibi Android'in kendi dahili kitaplıklarının çoğu onunla çalışmaz. Örneğin, bir dosya yöneticisi, önce APK'nin tamamını kendi kapsamlı depolama alanına kopyalamadan bir APK dosyasının simgesini (standart Android API'sini kullanarak) bile görüntüleyemeyecektir. Hata raporu.

Teknik açıdan meraklı kişiler için, şu anda bir appops komutu kullanarak Android Q'nun "Kapsamlı Depolama" özelliğini ADB aracılığıyla uygulama bazında devre dışı bırakmak mümkün. Kök kullanıcılar, komutları masaüstü bilgisayar olmadan doğrudan cihazlarında çalıştırabilirler. Bu tür komutlar belgelerde geliştirici özellikleri olarak açıklanmaktadır ve bu nedenle istenildiği zaman kaldırılabilir.

Bir uygulama için genel depolama erişimini etkinleştirin:

adb shell cmd appops set your-package-name android: legacy_storage allow && \adb shell am force-stop your-package-name

Bir uygulama için genel depolama erişimini devre dışı bırakın:

adb shell cmd appops set your-package-name android: legacy_storage default && \adb shell am force-stop your-package-name

Google bu değişikliğin güvenlik ve gizlilik avantajlarından söz ediyor ancak teknik açıdan herhangi bir gelişme yok. Uygulamalar, Android 1.0'dan bu yana dosyaları özel olarak saklama özelliğine sahiptir ve hemen hemen tüm uygulamalar bu özellikten yararlanmaktadır. Bir uygulamaya SAF aracılığıyla depolama alanınızın kök dizinine erişim izni verdiğinizde, uygulama herhangi bir dosyayı okuyabilir, yazabilir ve gönderebilir. Pie'da bir uygulamanın depolama alanına erişim izni verdiğinizde yaptığı gibi, hain geliştiricisine saldırmak istiyor.

Tek "güvenlik iyileştirmesi", artık bir kullanıcının bunu yapmasının daha zorlu bir süreç olması nedeniyle ortaya çıkıyor. Elbette bir uygulama yalnızca sahip olduğunuz fotoğraflar ve videolar gibi en kişisel bilgilerinizi çalmak istemediği sürece Google'ın basit bir açılır pencerede "evet" güvenliği kullanan alternatif bir erişim çözümü eklediği diyalog.

Google'ın bu değişiklikle ne gibi faydalar sağlamayı umduğu bilinmiyor. Android Q beta belgelerinde resmi olarak belirtilen neden, "kullanıcılara dosyaları üzerinde daha fazla kontrol sağlamak ve dosyaları sınırlamaktır" dağınıklık." Kapsamlı depolama, mevcut haliyle, kullanıcının yapmasına izin verilenlerin yeni bir sınırlamasıdır, yetkilerinin bir uzantısı değildir. kontrol. Dağınıklığı azaltma iddiası bir dereceye kadar geçerli olabilir, ancak bunun tek nedeni değişikliğin dosyaları kullanma yeteneğini azaltmasıdır. Ve bazı uygulamaların artık onlarla çalışmak için dosyaları kopyalamak zorunda kalması sorununu göz önüne aldığımızda "karışıklık" artıyor.

Google, kullanıcılara dosyalar ve dağınıklık üzerinde daha fazla kontrol sağlama konusunda gerçekten endişeleniyorsa, Mevcut Android Q tasarımını yanlış bir şekilde markalamak yerine, doğrudan bu konuya hitap eden bir çözüm gelişim. En basit yanıt, mevcut depolama izin isteği iletişim kutusunu kullanarak kullanıcıların bir uygulamanın kapsamlı mı yoksa genel dosya sistemi erişimine mi sahip olmasını isteyip istemediklerine karar vermelerine izin vermek olacaktır. Kullanıcıların burada kötü kararlar vermesi konusunda özel bir endişeniz varsa, kesinlikle mümkündür. bu iletişim kutusunu daha belirgin hale getirin ve bir uygulamanın tam olarak onaylanması için ek kullanıcı etkileşimi gerektirsin erişim.

Android'in kullanıcılara dosyaları üzerinde daha fazla kontrol vermesini nasıl sağlayabileceğinin cevabı aslında kullanıcılara daha fazla kontrol vermektir, kontrolü elinden almak ve Android platformunun yeteneklerini temelden kısıtlamak değil.


Editörün Notu: Bu, XDA Kıdemli Üyesi tarafından yazılan konuk makalesidir. tliebeckkonusundaki çalışmalarıyla tanınıyor FX Dosya Gezgini. Bu makalenin içeriği, XDA-Developers Genel Yayın Yönetmeni Mishaal Rahman'ın minimum girdi ve düzenlemesi ile Android Q'nun Kapsamlı Depolama kısıtlamalarına ilişkin kendi görüşünü ve analizini yansıtmaktadır. Bu endişelerden bazılarını sormak için Google'a ulaştık ancak yayınlanma tarihine kadar şirketten herhangi bir yanıt alamadık.