„Android Q“ pritaikyta saugykla verčia kūrėjus naudoti SAF, o tai šlykštu

„Android Q“ taikomosios atminties pakeitimai yra galvos skausmas, nes šiuo metu „Storage Access Framework“ turi keletą trūkumų.

„Android Q“ iš esmės keičia saugyklos veikimą jūsų telefone. Visose versijose iki Pie, „Android“ saugykla veikė kaip stalinis kompiuteris: galite naudoti bet kurią programą, kurią norite skaityti arba rašyti bet kurį failą (jei suteikiate programai leidimą tai daryti). Naudodama Q, „Google“ pristato (ir reikalauja)Apimtas saugojimas“, todėl „Android“ veikia labiau kaip „iPhone“, kur saugykla yra atskirta nuo kiekvienos programos. Programa gali pasiekti tik savo failus, o jei ji pašalinama, visi jos failai ištrinami.

Laimei, „Android Q“ vis dar išlaiko tam tikrą „Android“ centrinės failų sistemos veikimo būdą. Deja, dabar vartotojui sudėtinga nustatyti programas, kad jos pasiektų, o našumas ir pajėgumas gerokai sumažėjo. Ir kūrėjai turės iš esmės perkoduoti programas, kad tai palaikytų.

Programos, kurioms reikalinga bendra prieiga prie failų sistemos, pvz. biuro rinkinys, vaizdų rengyklė arba failų tvarkyklė dabar turės naudoti „Android“ API, vadinamą „

Saugyklos prieigos sistema“ (SAF), visoms failų operacijoms. SAF buvo prieinamas nuo 5.0 „Lollipop“ versijos „Android“, tačiau kūrėjai linkę jo nenaudoja, nebent to reikia, nes jis turi sudėtingą ir prastą dokumentuota API, prasta vartotojo patirtis, prastas našumas ir prastas patikimumas (daugiausia įrenginio tiekėjo įdiegimo forma Problemos). Dėl sunkumų pereinant prie SAF, „Google“ nusprendė leisti programas, kurios dar nenurodo „Android Q“ palaikymas veiktų taip, kaip anksčiau, tačiau tai pasikeis, kai „Play“ parduotuvėje reikės, kad visos programos palaikytų Q kitais metais.

Akivaizdžiausias naudotojams skirtas SAF pokytis yra galimybė programai suteikti prieigą prie saugyklos. Kad programa gautų prieigą, ji pateikia užklausą OS, kuri tada parodo katalogo parinkiklio ekraną. Šiame ekrane vartotojas pasirenka aplanko hierarchijos šaknį, kurioje ta programa galės skaityti ir rašyti failus. Naudotojas turi atlikti šį procesą kiekvienai programai, kuriai reikalinga prieiga prie vietinių failų, arba du kartus programoje, jei reikia suteikti jai prieigą prie išorinės SD kortelės.

„Google“ bent jau patobulino šį procesą Q beta 3, nes ankstesnės beta versijos neleido programai net pasiūlyti vietos, kurią vartotojas galėtų pasirinkti reikalavo, kad vartotojas atliktų nemažai darbo kad iš tikrųjų rastų savo įrenginio pagrindinę atmintį.

Failų įvesties / išvesties našumas šiek tiek pablogėja naudojant SAF, tačiau didžiausia problema yra faile katalogo operacijos, kur tai yra ~25–50 kartų lėtesnė nei įprasta prieiga prie failų Pyragas. Failų tvarkyklių atveju tai reiškia, kad paieška ir saugyklos naudojimo skaičiavimai užtruks daug ilgiau. Pranešimas apie riktą su demonstracine programa yra galima čia.

Pavyzdinis SAFTest bandomasis paleidimas, rodantis našumo skirtumą tarp įprastos failų I/O API su SAF.

Dar didesnė našumo problema yra ta, kad kai kurios programos turės nukopijuoti failus į vietinę „apimtos saugyklos“ sritį, kad galėtų su jais dirbti. Tai gali būti problematiška, kai tokie failai yra kelių gigabaitų dydžio, pvz. vaizdo failų ar suglaudintų archyvų atveju. Daugelis „Android“ programų naudojasi nuostabiu atvirojo kodo „Java“ bibliotekų skaičiumi kūrėjų bendruomenėje, o šioms bibliotekoms paprastai reikalinga tiesioginė failų sistemos prieiga. Jie nėra skirti „Android“ ir juos reikės perrašyti, kad veiktų su SAF. Dar blogiau, kad daugelis „Android“ vidinių bibliotekų su juo neveiks, pvz., paketų tvarkyklė arba „zip“ API. Pavyzdžiui, failų tvarkyklė net negalės rodyti APK failo piktogramos (naudodama standartinę Android API), prieš tai nenukopijuodama viso APK į saugyklos sritį. Pranešimas apie klaidas.

Techniškai linkusiems žmonėms šiuo metu galima išjungti „Android Q“ „Scoped Storage“ kiekvienai programai per ADB, naudojant komandą appops. Pagrindiniai vartotojai gali vykdyti komandas tiesiai savo įrenginyje, neturėdami stalinio kompiuterio. Tokios komandos dokumentacijoje aprašomos kaip kūrėjo funkcijos, todėl jas galima bet kada pašalinti.

Įgalinti bendrą programos saugyklos prieigą:

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

Išjungti bendrąją programos saugyklos prieigą:

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

„Google“ pabrėžia šio pakeitimo naudą saugai ir privatumui, tačiau techniškai patobulinimų nėra. Programos turi galimybę privačiai saugoti failus nuo 1.0 versijos Android, ir beveik visos programos naudoja šią galimybę. Kai suteikiate programai prieigą prie šakninio saugyklos katalogo per SAF, ji gali skaityti, rašyti ir siųsti bet kokį failą. nori savo niekšiškam kūrėjui lygiai taip pat, kaip galėjo, kai suteikėte programai prieigą prie saugyklos „Pie“.

Vienintelis „saugumo patobulinimas“ atsiranda todėl, kad dabar vartotojui tai yra sudėtingesnis procesas. Nebent, žinoma, programa nori pavogti asmeniškiausią informaciją, pvz., nuotraukas ir vaizdo įrašus imtasi, kuriam „Google“ pridėjo alternatyvų prieigos sprendimą, kuriame naudojamas paprastas iššokantis spustelėjus „taip“ apsauga dialogas.

Nežinoma, kokios naudos „Google“ tikisi pasiekti šiuo pakeitimu. Oficiali „Android Q“ beta versijos dokumentuose nurodyta priežastis yra „suteikti vartotojams daugiau galimybių valdyti savo failus ir apriboti failus netvarka“. Apimta saugykla dabartine forma yra naujas apribojimas, ką vartotojui leidžiama daryti, o ne jų išplėtimas. kontrolė. Teiginys apie netvarkos mažinimą gali būti šiek tiek pagrįstas, bet tik todėl, kad pakeitimas sumažina galimybę naudoti failus. Ir „netvarka“ padidėja, kai atsižvelgiama į problemą, kai kai kurios programos dabar turi kopijuoti failus, kad galėtų su jomis dirbti.

Jei „Google“ tikrai nori suteikti vartotojams daugiau galimybių valdyti failus ir netvarką, jie turėtų sukurti a sprendimas, kuris tiesiogiai tai sprendžia, o ne klaidingai įvardija dabartinį „Android Q“ dizainą kaip tokį tobulinimas. Paprasčiausias atsakymas būtų leisti vartotojams nuspręsti, ar jie nori, kad programai būtų suteikta aprėpties, ar bendra failų sistemos prieiga, naudojant esamą saugojimo leidimo užklausos dialogo langą. Jei naudotojai kelia ypatingą susirūpinimą dėl netinkamų sprendimų, tai tikrai įmanoma padaryti šį dialogo langą ryškesnį ir reikalauti papildomos naudotojo sąveikos, kad būtų patvirtinta visa programa prieiga.

Atsakymas į klausimą, kaip „Android“ gali suteikti vartotojams daugiau galimybių valdyti savo failus, yra iš tikrųjų suteikti vartotojams daugiau kontrolės, o ne jos atimti ir iš esmės apriboti „Android“ platformos galimybes.


Redaktoriaus pastaba: tai svečio straipsnis, kurį parašė XDA vyresnysis narys tliebekas, geriausiai žinomas dėl savo darbų FX failų naršyklė. Šio straipsnio turinys atspindi jo paties nuomonę ir analizę apie „Android Q“ taikomų saugyklų apribojimus, su minimaliu „XDA-Developers“ vyriausiojo redaktoriaus Mishaalo Rahmano įnašu ir redagavimu. Susisiekėme su „Google“ ir paklausėme apie kai kuriuos iš šių rūpesčių, bet iki paskelbimo laiko iš bendrovės nieko negavome.