Aptveramā krātuve operētājsistēmā Android Q liek izstrādātājiem izmantot SAF, kas ir nepatīkami

Izmaiņas Scoped Storage operētājsistēmā Android Q ir galvassāpes, jo pašlaik Storage Access Framework ir daži trūkumi.

Android Q būtiski maina atmiņas darbību tālrunī. Visās versijās līdz pat Pie Android krātuve darbojās kā galddators: varat izmantot jebkuru lietotni, kuru vēlaties lasīt vai rakstīt jebkuru failu (ja piešķirat lietotnei atļauju to darīt). Izmantojot Q, Google ievieš (un pieprasa) "Aptveramā krātuve”, kas padara Android darbību vairāk kā iPhone, kur katrai lietotnei ir izolēta krātuve. Programma var piekļūt tikai saviem failiem, un, ja tā ir atinstalēta, visi tās faili tiek izdzēsti.

Par laimi Android Q joprojām saglabā daļu no Android sākotnējās centrālās failu sistēmas darbības. Diemžēl tagad lietotājam ir apgrūtinoši iestatīt lietotnes, lai piekļūtu tai, un ir ievērojami samazināta veiktspēja un iespējas. Un izstrādātājiem būs būtiski jāpārkodē lietotnes, lai to atbalstītu.

Programmas, kurām nepieciešama vispārēja piekļuve failu sistēmai, piemēram, biroja komplektam, attēlu redaktoram vai failu pārvaldniekam tagad būs jāizmanto Android API ar nosaukumu "

Storage Access Framework" (SAF), visām failu operācijām. SAF ir pieejams kopš operētājsistēmas Android 5.0 Lollipop, taču izstrādātāji mēdz to neizmantot, ja vien tas nav nepieciešams, jo tam ir sarežģīta un slikta dokumentēta API, slikta lietotāja pieredze, slikta veiktspēja un zema uzticamība (lielākoties ierīces pārdevējam paredzētas ieviešanas veidā jautājumi). Grūtību dēļ pārejā uz SAF Google ir nolēmis atļaut lietotnes, kas vēl nenorāda Android Q atbalsts darbosies tāpat kā agrāk, taču tas mainīsies, kad Play veikalā visām lietotnēm būs jāatbalsta Q nākamgad.

Acīmredzamākās izmaiņas, kas skar lietotājus, izmantojot SAF, ir pieredze, piešķirot lietotnei piekļuvi krātuvei. Lai lietotne varētu piekļūt, tā iesniedz pieprasījumu OS, kas pēc tam parāda direktoriju izvēles ekrānu. Šajā ekrānā lietotājs izvēlas mapju hierarhijas sakni, kurā šī lietotne varēs lasīt un rakstīt failus. Lietotājam šis process ir jāveic katrai lietotnei, kurai nepieciešama piekļuve vietējiem failiem, vai divreiz katrā lietotnē, ja nepieciešams tai piešķirt piekļuvi arī ārējai SD kartei.

Google vismaz uzlaboja šo procesu Q beta 3, jo iepriekšējās beta versijas neļāva lietotnei pat ieteikt atrašanās vietu, ko lietotājs varētu izvēlēties, kuru prasīja lietotājam diezgan daudz darba lai faktiski atrastu savas ierīces primāro krātuvi.

Failu I/O veiktspēja nedaudz ietekmē SAF, taču visizteiktākā problēma ir failā direktoriju operācijas, kur tas ir aptuveni 25 līdz 50 reizes lēnāks nekā parastajai piekļuvei failiem Pīrāgs. Failu pārvaldnieku gadījumā tas nozīmē, ka meklēšanai un krātuves lietojuma aprēķiniem būs nepieciešams par daudz vairāk laika. Kļūdas ziņojums ar demonstrācijas lietotni ir pieejams šeit.

SAFTest testa paraugs, kas parāda veiktspējas atšķirību starp parasto failu I/O API ar SAF.

Vēl lielāka veiktspējas problēma ir tā, ka dažām lietotnēm būs jākopē faili uz vietējo "tvēruma krātuves" apgabalu, pirms tās varēs strādāt ar tām. Tas var būt problemātiski, ja šādu failu izmērs ir vairāki gigabaiti, piemēram, video failu vai saspiestu arhīvu gadījumā. Daudzas Android lietotnes izmanto apbrīnojamo atvērtā pirmkoda Java bibliotēku priekšrocības izstrādātāju kopienā, un šo bibliotēku darbībai parasti ir nepieciešama tieša piekļuve failu sistēmai. Tie nav paredzēti Android ierīcēm, un tie būtu jāpārraksta, lai tie darbotos ar SAF. Vēl ļaunāk, daudzas pašas Android iekšējās bibliotēkas ar to nedarbosies, piemēram, pakotņu pārvaldnieks vai zip API. Piemēram, failu pārvaldnieks pat nespēs parādīt ikonu APK failam (izmantojot standarta Android API), ja vispirms netiek kopēts viss APK savā tvēruma krātuves apgabalā. Kļūdu ziņojums.

Tehniski noskaņotiem cilvēkiem pašlaik ir iespējams atspējot Android Q “Scoped Storage” katrai lietotnei, izmantojot ADB, izmantojot komandu appops. Saknes lietotāji var izpildīt komandas tieši savā ierīcē, neizmantojot galddatoru. Šādas komandas dokumentācijā ir aprakstītas kā izstrādātāja funkcijas, un tāpēc tās var noņemt jebkurā laikā.

Iespējot lietotnes vispārējo piekļuvi krātuvei:

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

Atspējot vispārējo piekļuvi krātuvei lietotnei:

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

Google norāda uz šo izmaiņu sniegtajām drošības un privātuma priekšrocībām, taču tehniski runājot, uzlabojumu nav. Kopš operētājsistēmas Android 1.0 lietotnēm ir bijusi iespēja privāti uzglabāt failus, un gandrīz visas lietotnes izmanto šo iespēju. Ja piešķirat lietotnei piekļuvi savas krātuves saknes direktorijam, izmantojot SAF, tā var lasīt, rakstīt un nosūtīt jebkuru failu. vēlas savam nelietīgajam izstrādātājam tieši tādā pašā veidā, kā to darīja, kad jūs piešķīrāt lietotnei piekļuvi krātuvei pakalpojumā Pie.

Vienīgais "drošības uzlabojums" notiek tāpēc, ka tagad lietotājam tas ir grūtāks process. Ja vien lietotne, protams, nevēlas nozagt tikai jūsu personiskāko informāciju, piemēram, jūsu fotoattēlus un videoklipus pieņemts, kam Google ir pievienojis alternatīvu piekļuves risinājumu, kas izmanto vienkāršu uznirstošo logu “noklikšķiniet jā” drošību dialoglodziņš.

Nav zināms, kādus ieguvumus Google cer sasniegt ar šīm izmaiņām. Oficiālais iemesls Android Q beta dokumentācijā ir “dot lietotājiem lielāku kontroli pār saviem failiem un ierobežot failu skaitu nekārtība." Aptveramā krātuve tās pašreizējā formā ir jauns ierobežojums tam, ko lietotājs drīkst darīt, nevis paplašinājums kontrole. Apgalvojums par jucekli samazināšanu var būt zināmā mērā pamatots, taču tikai tāpēc, ka izmaiņas samazina iespēju izmantot failus. Un “jucekli” palielinās, ja ņem vērā problēmu, ka dažām lietotnēm tagad ir jādublē faili, lai strādātu ar tām.

Ja Google patiešām rūpējas par to, lai lietotāji varētu vairāk kontrolēt failus un jucekli, viņiem vajadzētu izveidot a risinājums, kas tieši to risina, nevis nepatiesi apzīmē pašreizējo Android Q dizainu kā tādu uzlabošanu. Vienkāršākā atbilde būtu ļaut lietotājiem izlemt, vai viņi vēlas, lai programmai būtu tvēruma vai vispārēja piekļuve failu sistēmai, izmantojot esošo krātuves atļauju pieprasījuma dialoglodziņu. Ja ir īpašas bažas par to, ka lietotāji šeit pieņem sliktus lēmumus, tas noteikti ir iespējams padarīt šo dialoglodziņu pamanāmāku un pieprasīt papildu lietotāja mijiedarbību, lai pilnībā apstiprinātu lietotni piekļuvi.

Atbilde uz to, kā Android var sniegt lietotājiem lielāku kontroli pār saviem failiem, ir faktiski dot lietotājiem lielāku kontroli, nevis to atņemt un būtiski ierobežot Android platformas iespējas.


Redaktora piezīme: Šis ir viesa raksts, ko rakstījis XDA vecākais loceklis Tlībeka, vislabāk pazīstams ar savu darbu vietnē FX failu pārlūks. Šī raksta saturs atspoguļo viņa paša viedokli un analīzi par Android Q aptvertās krātuves ierobežojumiem, minimāli ievadot un rediģējot no XDA-Developers galvenā redaktora Mishaal Rahman. Mēs sazinājāmies ar Google, lai uzdotu viņiem jautājumus par dažām no šīm bažām, taču līdz publikācijas laikam neesam saņēmuši atbildi no uzņēmuma.