Scoped Storage u Androidu Q tjera programere da koriste SAF, što je sranje

click fraud protection

Promjene Scoped Storage u Androidu Q predstavljaju glavobolju za rješavanje, jer Storage Access Framework trenutno ima nekoliko nedostataka.

Android Q iz temelja mijenja način na koji pohrana radi na vašem telefonu. U svakoj verziji do Pie, Androidova pohrana radila je kao stolno računalo: možete koristiti bilo koju aplikaciju koju želite čitati ili pisati bilo koju datoteku (ako aplikaciji date dopuštenje za to). Uz Q, Google uvodi (i zahtijeva) "Scoped Storage," zbog čega Android radi sličnije iPhoneu, gdje je pohrana izolirana za svaku aplikaciju. Aplikacija može pristupiti samo svojim datotekama, a ako je deinstalirana, sve se njezine datoteke brišu.

Srećom, Android Q još uvijek zadržava nešto od Androidovog izvornog ponašanja središnjeg datotečnog sustava. Nažalost, korisniku je sada nezgrapno postavljati aplikacije za pristup i značajno je smanjio performanse i mogućnosti. A programeri će morati značajno rekodirati aplikacije kako bi to podržali.

Aplikacije koje trebaju opći pristup datotečnom sustavu, npr. uredski paket, uređivač slika ili upravitelj datoteka, sada će morati koristiti Android API pod nazivom "

Okvir za pristup pohrani" (SAF), za sve operacije datoteka. SAF je dostupan od Android 5.0 Lollipop, ali programeri ga obično ne koriste osim ako nije potreban, jer ima težak i loš dokumentirani API, loše korisničko iskustvo, loša izvedba i slaba pouzdanost (uglavnom u obliku implementacije specifične za dobavljača uređaja pitanja). Kao rezultat poteškoća u prijelazu na SAF, Google je odlučio dopustiti aplikacije koje još nisu navedene Podrška za Android Q radit će kao prije, ali to će se promijeniti kada Play Store bude zahtijevao da sve aplikacije podržavaju Q slijedeće godine.

Najočitija promjena s kojom se suočavaju korisnici sa SAF-om je iskustvo odobravanja pristupa aplikaciji pohrani. Da bi aplikacija dobila pristup, postavlja zahtjev OS-u, koji zatim prikazuje zaslon za odabir direktorija. Na ovom zaslonu korisnik odabire korijen hijerarhije mape u kojoj će ta aplikacija moći čitati i pisati datoteke. Korisnik mora proći kroz ovaj postupak za svaku aplikaciju koja zahtijeva pristup lokalnim datotekama ili dva puta po aplikaciji ako mu također treba dodijeliti pristup vanjskoj SD kartici.

Google je barem poboljšao ovaj proces za Q beta 3, budući da prethodne beta verzije nisu dopuštale aplikaciji čak ni predlaganje lokacije za odabir korisnika, što zahtijevalo je od korisnika dosta posla kako bi zapravo pronašli primarnu pohranu svog uređaja.

Datotečni I/O izvedba je donekle pogođena pod SAF-om, ali najveći problem leži u datoteci operacije direktorija, gdje je ~25 do 50 puta sporiji od konvencionalnog pristupa datoteci koji je moguć u Pita. U slučaju upravitelja datotekama, to znači da će za izvođenje pretraživanja i izračune korištenja pohrane trebati nekoliko redova veličine. Izvješće o pogrešci s pokaznom aplikacijom je dostupan ovdje.

Uzorak testnog izvođenja SAFTesta koji pokazuje razliku u izvedbi između konvencionalnog I/O API-ja za datoteke i SAF-a.

Još je veći problem s performansama to što će neke aplikacije morati kopirati datoteke u svoje lokalno područje "ograničene pohrane" prije nego što budu u mogućnosti raditi s njima. To može biti problematično kada su takve datoteke veličine više gigabajta, npr. u slučaju video datoteka ili komprimiranih arhiva. Mnoge Android aplikacije koriste prednosti nevjerojatnog broja Java biblioteka otvorenog koda u zajednici programera, a te biblioteke obično zahtijevaju izravan pristup datotečnom sustavu da bi radile. Nisu specifični za Android i zahtijevali bi ponovno pisanje da bi radili sa SAF-om. Još gore, mnoge Androidove vlastite interne biblioteke neće raditi s njim, poput upravitelja paketa ili zip API-ja. Na primjer, upravitelj datoteka čak neće moći prikazati ikonu za APK datoteku (pomoću standardnog Android API-ja) bez prethodnog kopiranja cijelog APK-a u vlastito područje pohrane. Izvješće o pogrešci.

Za ljude sklone tehnici, trenutačno je moguće onemogućiti "Scoped Storage" Androida Q za svaku aplikaciju putem ADB-a pomoću naredbe appops. Root korisnici mogu izvršavati naredbe izravno na svom uređaju bez stolnog računala. Takve naredbe opisane su u dokumentaciji kao razvojne značajke i stoga se mogu ukloniti u bilo kojem trenutku.

Omogućite opći pristup pohrani za aplikaciju:

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

Onemogućite pristup općoj pohrani za aplikaciju:

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

Google ističe prednosti ove promjene u pogledu sigurnosti i privatnosti, ali tehnički gledano, nema poboljšanja. Aplikacije imaju mogućnost privatnog pohranjivanja datoteka od Androida 1.0 i gotovo sve aplikacije koriste tu mogućnost. Kada aplikaciji dopustite pristup korijenskom direktoriju vaše pohrane putem SAF-a, ona može čitati, pisati i slati bilo koju datoteku želi svom zločestom programeru na potpuno isti način na koji bi mogao kada ste aplikaciji odobrili pristup pohrani u Pie.

Do jedinog "sigurnosnog poboljšanja" dolazi zato što je korisniku sada zahtjevniji postupak. Osim naravno ako aplikacija ne želi ukrasti samo vaše najosobnije podatke, poput fotografija i videozapisa koje imate preuzeto, za što je Google dodao alternativno rješenje pristupa koje koristi jednostavnu sigurnosnu opciju klik-da u skočnom prozoru dijalog.

Nije poznato kakve se koristi Google nada postići ovom promjenom. Službeni navedeni razlog u dokumentaciji beta verzije Androida Q je "davanje korisnicima veće kontrole nad njihovim datotekama i ograničavanje datoteka nered.” Ograničena pohrana, u sadašnjem obliku, novo je ograničenje onoga što korisnik smije činiti, a ne proširenje kontrolirati. Tvrdnja o smanjenju nereda može biti donekle valjana, ali samo zato što promjena smanjuje mogućnost korištenja datoteka uopće. A "nered" se povećava kada uzmete u obzir problem nekih aplikacija koje sada moraju duplicirati datoteke da bi radile s njima.

Ako je Google uistinu zabrinut da korisnicima omogući veću kontrolu nad datotekama i neredom, trebali bi osmisliti a rješenje koje se izravno bavi time, umjesto da lažno označava trenutni Android Q dizajn kao takav poboljšanje. Najjednostavniji odgovor bio bi dopustiti korisnicima da odluče žele li da aplikacija ima ograničeni ili opći pristup datotečnom sustavu, koristeći postojeći dijaloški okvir zahtjeva za dozvolom za pohranu. Ako ovdje postoji posebna zabrinutost za korisnike koji donose loše odluke, to je svakako moguće učiniti taj dijaloški okvir istaknutijim i zahtijevati dodatnu interakciju korisnika kako bi se aplikacija u potpunosti odobrila pristup.

Odgovor na to kako Android može korisnicima dati veću kontrolu nad njihovim datotekama jest da korisnicima zapravo da veću kontrolu, a ne da im je oduzme i suštinski ograniči mogućnosti platforme Android.


Napomena urednika: Ovo je gostujući članak koji je napisao viši član XDA tliebeck, najpoznatiji po svom radu na FX File Explorer. Sadržaj ovog članka odražava njegovo vlastito mišljenje i analizu ograničenja Android Q Scoped Storage, uz minimalan unos i uređivanje Mishaala Rahmana, glavnog urednika XDA-Developers. Obratili smo se Googleu kako bismo ih pitali o nekim od tih zabrinutosti, ali nismo dobili odgovor od tvrtke do vremena objave.