Scoped Storage v Androidu Q nutí vývojáře používat SAF, což je na hovno

click fraud protection

Změny Scoped Storage v Androidu Q jsou bolestné, protože Storage Access Framework má právě teď několik nedostatků.

Android Q zásadně mění způsob, jakým funguje úložiště ve vašem telefonu. V každé verzi až do Pie fungovalo úložiště Androidu jako stolní počítač: můžete použít jakoukoli aplikaci, kterou chcete číst nebo zapisovat jakýkoli soubor (pokud k tomu aplikaci udělíte oprávnění). S Q Google zavádí (a vyžaduje) "Scoped Storage“, díky čemuž Android funguje více jako iPhone, kde je úložiště izolované pro každou aplikaci. Aplikace má přístup pouze ke svým vlastním souborům, a pokud je odinstalována, všechny její soubory jsou smazány.

Naštěstí si Android Q stále zachovává část původního chování systému Android jako centrální souborový systém. Bohužel je nyní pro uživatele těžkopádné nastavovat aplikace pro přístup k němu a má výrazně snížený výkon a možnosti. A vývojáři budou muset podstatně překódovat aplikace, aby to podporovaly.

Aplikace, které potřebují obecný přístup k souborovému systému, např. kancelářský balík, editor obrázků nebo správce souborů nyní bude muset používat rozhraní Android API s názvem „

Storage Access Framework" (SAF), pro všechny operace se soubory. SAF je k dispozici od Androidu 5.0 Lollipop, ale vývojáři jej obvykle nepoužívají, pokud to není nutné, protože má obtížné a špatné zdokumentované API, špatná uživatelská zkušenost, slabý výkon a nízká spolehlivost (z velké části ve formě implementace specifické pro dodavatele zařízení problémy). V důsledku potíží s přechodem na SAF se Google rozhodl povolit aplikace, které to zatím neoznačují Podpora Android Q bude fungovat jako dříve, ale to se změní, až bude Obchod Play vyžadovat, aby všechny aplikace podporovaly Q příští rok.

Nejviditelnější změnou, která se týká uživatele se SAF, je zkušenost s udělením přístupu aplikace k úložišti. Aby aplikace získala přístup, odešle požadavek na operační systém, který poté zobrazí obrazovku pro výběr adresáře. Na této obrazovce uživatel vybere kořen hierarchie složek, ve kterém bude aplikace moci číst a zapisovat soubory. Uživatel musí projít tímto procesem pro každou aplikaci, která vyžaduje přístup k místním souborům, nebo dvakrát pro každou aplikaci, pokud jí potřebuje udělit také přístup k externí kartě SD.

Google tento proces alespoň vylepšil Q beta 3, protože předchozí beta verze neumožňovaly aplikaci ani navrhnout místo, které by měl uživatel vybrat, což vyžadovalo, aby uživatel udělal docela dost práce aby skutečně našli primární úložiště svého zařízení.

Výkon I/O souboru je pod SAF poněkud ovlivněn, ale nejvýraznější problém spočívá v souboru operace s adresáři, kde je to ~25 až 50krát pomalejší než konvenční přístup k souborům Koláč. V případě správců souborů to znamená, že vyhledávání a výpočty využití úložiště bude trvat řádově déle. Zpráva o chybě s ukázkovou aplikací je k dispozici zde.

Ukázkový testovací běh SAFTest ukazující rozdíl ve výkonu mezi konvenčním souborovým I/O API a SAF.

Ještě větší problém s výkonem spočívá v tom, že některé aplikace budou muset zkopírovat soubory do své místní oblasti „omezeného úložiště“, než s nimi budou moci pracovat. To může být problematické, pokud mají takové soubory velikost několika gigabajtů, např. v případě video souborů nebo komprimovaných archivů. Mnoho aplikací pro Android využívá úžasný počet open-source Java knihoven ve vývojářské komunitě a tyto knihovny běžně vyžadují přímý přístup k souborovému systému, aby fungovaly. Nejsou specifické pro Android a pro práci se SAF by vyžadovaly přepsání. Ještě horší je, že s ním nebude fungovat mnoho vlastních interních knihoven Androidu, jako je správce balíčků nebo zip API. Například správce souborů nebude ani schopen zobrazit ikonu souboru APK (pomocí standardního rozhraní Android API), aniž by nejprve zkopíroval celý soubor APK do vlastní oblasti úložiště. Hlášení chyby.

Pro technicky založené lidi je v současné době možné deaktivovat „Scoped Storage“ systému Android Q na základě jednotlivých aplikací prostřednictvím ADB pomocí příkazu appops. Uživatelé root mohou spouštět příkazy přímo na svém zařízení bez stolního počítače. Takové příkazy jsou v dokumentaci popsány jako funkce pro vývojáře, a proto mohou být kdykoli odstraněny.

Povolit obecný přístup k úložišti pro aplikaci:

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

Zakázat obecný přístup k úložišti pro aplikaci:

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

Google propaguje výhody této změny v oblasti zabezpečení a ochrany soukromí, ale technicky vzato k žádnému zlepšení nedochází. Aplikace mají možnost soukromě ukládat soubory od Androidu 1.0 a téměř všechny aplikace tuto možnost využívají. Když aplikaci udělíte přístup ke kořenovému adresáři vašeho úložiště prostřednictvím SAF, může číst, zapisovat a odesílat jakýkoli soubor. chce svému hanebnému vývojáři přesně stejným způsobem, jakým by mohl, když jste aplikaci udělili přístup k úložišti v Pie.

Jediné „zlepšení zabezpečení“ přichází proto, že je to nyní pro uživatele náročnější proces. Pokud ovšem aplikace nechce ukrást pouze vaše nejosobnější informace, jako jsou fotografie a videa, které máte převzato, k čemuž Google přidal alternativní řešení přístupu, které využívá jednoduché zabezpečení ve vyskakovacím okně kliknutím-ano dialog.

Není známo, jaké výhody chce Google touto změnou dosáhnout. Oficiálním důvodem uvedeným v beta dokumentaci Android Q je „poskytnout uživatelům větší kontrolu nad jejich soubory a omezit soubory nepořádek.” Scoped storage ve své současné podobě je novým omezením toho, co smí uživatel dělat, nikoli rozšířením jeho řízení. Tvrzení o snížení nepořádku může být do jisté míry oprávněné, ale pouze proto, že změna snižuje možnost vůbec používat soubory. A „nepořádek“ se zvyšuje, když vezmete v úvahu problém, že některé aplikace nyní musí duplikovat soubory, aby s nimi mohly pracovat.

Pokud se Google skutečně zajímá o to, aby uživatelům poskytl větší kontrolu nad soubory a nepořádkem, měl by architekt a řešení, které to přímo řeší, místo aby falešně označovalo současný design Androidu Q jako takový zlepšení. Nejjednodušší odpovědí by bylo nechat uživatele rozhodnout, zda chtějí, aby aplikace měla omezený nebo obecný přístup k souborovému systému, pomocí dialogového okna žádosti o oprávnění k existujícímu úložišti. Pokud zde existuje zvláštní obava o uživatele, kteří se zde špatně rozhodují, je to určitě možné zviditelnit tento dialog a vyžadovat další interakci uživatele, aby byla aplikace schválena jako úplná přístup.

Odpověď na to, jak může Android poskytnout uživatelům větší kontrolu nad jejich soubory, je skutečně poskytnout uživatelům větší kontrolu, nikoli ji brát a zásadně omezovat možnosti platformy Android.


Poznámka editora: Toto je článek hosta napsaný senior členem XDA tliebeck, nejlépe známý pro svou práci na Průzkumník souborů FX. Obsah tohoto článku odráží jeho vlastní názor a analýzu omezení Scoped Storage pro Android Q s minimálními vstupy a úpravami od Mishaala Rahmana, šéfredaktora XDA-Developers. Oslovili jsme Google, abychom se jich zeptali na některé z těchto obav, ale do doby zveřejnění jsme od společnosti nedostali odpověď.