Scoped Storage v systéme Android Q núti vývojárov používať SAF, čo je na hovno

Zmeny Scoped Storage v systéme Android Q sú problémom, s ktorým sa treba vysporiadať, pretože Storage Access Framework má práve teraz niekoľko nedostatkov.

Android Q zásadne mení spôsob, akým funguje úložisko vo vašom telefóne. V každej verzii až po Pie fungovalo úložisko Androidu ako stolný počítač: môžete použiť akúkoľvek aplikáciu, ktorú chcete čítať alebo zapisovať do ľubovoľného súboru (ak na to aplikácii udelíte povolenie). S Q Google zavádza (a vyžaduje) “Scoped Storage“, vďaka čomu Android funguje viac ako iPhone, kde je úložisko izolované pre každú aplikáciu. Aplikácia má prístup iba k svojim vlastným súborom a ak je odinštalovaná, všetky jej súbory sa odstránia.

Našťastie Android Q si stále zachováva niektoré z pôvodného správania systému Android centrálneho súborového systému. Nanešťastie je teraz pre používateľa ťažkopádne nastavovať aplikácie na prístup k nemu a má výrazne znížený výkon a možnosti. A vývojári budú musieť podstatne prekódovať aplikácie, aby to podporovali.

Aplikácie, ktoré potrebujú všeobecný prístup k súborovému systému, napr. kancelársky balík, editor obrázkov alebo správca súborov bude teraz musieť používať rozhranie Android API s názvom „

Storage Access Framework" (SAF), pre všetky operácie so súbormi. SAF je k dispozícii od Androidu 5.0 Lollipop, ale vývojári ho zvyčajne nepoužívajú, pokiaľ to nie je potrebné, pretože má ťažké a zlé zdokumentované API, zlá používateľská skúsenosť, slabý výkon a slabá spoľahlivosť (väčšinou vo forme implementácie špecifickej pre dodávateľa zariadenia problémy). V dôsledku ťažkostí pri prechode na SAF sa spoločnosť Google rozhodla povoliť aplikácie, ktoré to ešte neoznačujú Podpora pre Android Q bude fungovať ako predtým, ale zmení sa to, keď Obchod Play bude vyžadovať, aby všetky aplikácie podporovali Q ďalší rok.

Najviditeľnejšou zmenou, ktorá sa týka používateľa SAF, je skúsenosť s udelením prístupu aplikácii k úložisku. Aby aplikácia získala prístup, odošle požiadavku do operačného systému, ktorý potom zobrazí obrazovku výberu adresára. Na tejto obrazovke používateľ vyberie koreňový adresár hierarchie priečinkov, v ktorom bude aplikácia môcť čítať a zapisovať súbory. Používateľ musí prejsť týmto procesom pre každú aplikáciu, ktorá vyžaduje prístup k miestnym súborom, alebo dvakrát pre každú aplikáciu, ak jej potrebuje udeliť aj prístup k externej SD karte.

Google tento proces aspoň vylepšil Q beta 3, pretože predchádzajúce beta verzie neumožňovali aplikácii ani navrhnúť miesto, ktoré by si mal používateľ vybrať, čo vyžadovalo od používateľa dosť práce aby skutočne našli primárne úložisko svojho zariadenia.

Výkon súboru I/O je v rámci SAF do istej miery ovplyvnený, ale najvýraznejší problém spočíva v súbore operácie s adresármi, kde je to ~25 až 50-krát pomalšie ako bežný prístup k súborom Koláč. V prípade správcov súborov to znamená, že vyhľadávanie a výpočty využitia úložiska budú trvať rádovo dlhšie. Hlásenie o chybe s ukážkovou aplikáciou je k dispozícii tu.

Ukážka testovacej prevádzky SAFTestu ukazujúca rozdiel vo výkone medzi konvenčným súborovým I/O API a SAF.

Ešte väčším problémom s výkonom je, že niektoré aplikácie budú musieť skopírovať súbory do svojej lokálnej oblasti „úložiska s rozsahom“, aby s nimi mohli pracovať. To môže byť problematické, keď takéto súbory majú veľkosť niekoľkých gigabajtov, napr. v prípade video súborov alebo komprimovaných archívov. Mnoho aplikácií pre Android využíva úžasný počet open source Java knižníc v komunite vývojárov a tieto knižnice bežne vyžadujú priamy prístup k súborovému systému, aby fungovali. Nie sú špecifické pre Android a vyžadovali by si prepísanie, aby fungovali so SAF. Ešte horšie je, že mnohé z vlastných interných knižníc systému Android s ním nebudú fungovať, ako napríklad správca balíkov alebo zip API. Napríklad správca súborov nebude môcť zobraziť ikonu súboru APK (pomocou štandardného rozhrania Android API) bez toho, aby najprv skopíroval celý súbor APK do vlastného úložného priestoru s rozsahom. Hlásenie chyby.

Pre technicky naladených ľudí je v súčasnosti možné zakázať „Scoped Storage“ systému Android Q pre každú aplikáciu prostredníctvom ADB pomocou príkazu appops. Používatelia root môžu vykonávať príkazy priamo na svojom zariadení bez stolného počítača. Takéto príkazy sú v dokumentácii opísané ako funkcie pre vývojárov, a preto môžu byť kedykoľvek odstránené.

Povolenie všeobecného prístupu k úložisku pre aplikáciu:

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

Zakázať prístup k všeobecnému úložisku pre aplikáciu:

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

Google propaguje výhody tejto zmeny v oblasti bezpečnosti a ochrany osobných údajov, no z technického hľadiska nejde o žiadne zlepšenie. Aplikácie majú od Androidu 1.0 možnosť súkromne ukladať súbory a túto možnosť využívajú takmer všetky aplikácie. Keď aplikácii udelíte prístup ku koreňovému adresáru vášho úložiska cez SAF, môže čítať, zapisovať a odosielať ľubovoľný súbor. chce svojmu hanebnému vývojárovi presne rovnakým spôsobom, akým by mohol, keď ste aplikácii udelili prístup k úložisku v Pie.

Jediné „zlepšenie zabezpečenia“ prichádza preto, že toto je teraz pre používateľa náročnejší proces. Ak, samozrejme, aplikácia nechce ukradnúť len vaše najosobnejšie informácie, ako sú fotografie a videá, ktoré máte prevzaté, pre ktoré spoločnosť Google pridala alternatívne riešenie prístupu, ktoré využíva jednoduché zabezpečenie kliknutím na vyskakovacie okno dialóg.

Nie je známe, aké výhody chce Google touto zmenou dosiahnuť. Oficiálnym dôvodom uvedeným v beta dokumentácii systému Android Q je „poskytnúť používateľom väčšiu kontrolu nad ich súbormi a obmedziť súbor neporiadok.“ Rozsah ukladania vo svojej súčasnej podobe predstavuje nové obmedzenie toho, čo môže používateľ robiť, nie rozšírenie jeho ovládanie. Tvrdenie o znížení neporiadku môže byť do istej miery opodstatnené, ale len preto, že zmena znižuje možnosť vôbec používať súbory. A „neporiadok“ sa zvyšuje, keď zvážite problém, že niektoré aplikácie teraz musia duplikovať súbory, aby s nimi mohli pracovať.

Ak sa Google skutočne zaujíma o to, aby používateľom poskytol väčšiu kontrolu nad súbormi a neporiadkom, mal by architekt a riešenie, ktoré to priamo rieši, namiesto falošného označovania súčasného dizajnu Android Q ako takého zlepšenie. Najjednoduchšou odpoveďou by bolo nechať používateľov rozhodnúť sa, či chcú, aby aplikácia mala obmedzený alebo všeobecný prístup k súborovému systému, pomocou dialógového okna žiadosti o povolenie k existujúcemu úložisku. Ak existuje osobitný záujem o používateľov, ktorí tu robia zlé rozhodnutia, určite je to možné urobiť toto dialógové okno viditeľnejším a vyžadovať ďalšiu interakciu používateľa na úplné schválenie aplikácie prístup.

Odpoveďou na to, ako môže Android poskytnúť používateľom väčšiu kontrolu nad svojimi súbormi, je skutočne poskytnúť používateľom väčšiu kontrolu, nie ich odobrať a zásadne obmedziť možnosti platformy Android.


Poznámka redaktora: Toto je hosťovský článok napísaný senior členom XDA tliebeck, známy najmä svojou prácou na Prieskumník súborov FX. Obsah tohto článku odráža jeho vlastný názor a analýzu obmedzení Scoped Storage pre Android Q s minimálnymi vstupmi a úpravami od Mishaala Rahmana, šéfredaktora XDA-Developers. Oslovili sme spoločnosť Google, aby sme sa jej spýtali na niektoré z týchto obáv, ale do času zverejnenia sme od spoločnosti nedostali odpoveď.