Android O prerušuje aplikácie, ktoré sa prekrývajú v hornej časti stavového riadka

Android O ukončuje podporu TYPE_SYSTEM_OVERLAY v prospech TYPE_APPLICATION_OVERLAY, čo vedie k prerušeniu aplikácií, ktoré prekrývajú stavový riadok.

Pramienok príspevkov popisujúcich nové funkcie pre používateľov, ktoré sa nachádzajú v Android O sa začína spomaľovať, keďže používatelia mali týždne na otestovanie softvéru na svojom zariadení. Pod kapotou sa však deje veľa, veľa zmien, ktoré sa pomaly odhaľujú. O jednej takejto zmene sme nedávno uverejnili informácie o zariadeniach Nexus a Pixel so systémom Android O prijatie SDCardFS. Dnes by sme však chceli diskutovať o zmene, ktorá ovplyvní vývojárov určitých aplikácií, najmä tých, ktoré prekrytie v hornej časti stavového riadku. Zdá sa, že tieto aplikácie sú nefunkčné v ukážke vývojára systému Android O, čo by ste na prvý pohľad mohli odmietnuť ako jednoduchú chybu, no ak sa ponoríte hlbšie do referenčnej dokumentácie, môže to byť zamýšľaná zmena spoločnosťou Google.


Android O preruší prekrytia stavového riadka

Jednou z mojich obľúbených vecí na Androide je jeho prispôsobivosť. Používatelia, ktorí sú rootovaní alebo používajú vlastné ROM, môžu natívne upravovať stavové riadky svojho systému v podstate bez obmedzení, ale ak je vaše zariadenie odkorenené, máte k dispozícii menej možností. Našťastie je v obchode Google Play veľa aplikácií, ktoré vám na základnej úrovni umožňujú zmeniť vzhľad stavového riadka. Je to možné vďaka šikovnej kombinácii systému Windows Overlay na zobrazenie vlastného stavového riadku nad existujúcim, Prijímače upozornení na zobrazovanie upozornení a voliteľne aj služba zjednodušenia ovládania, ktorá umožňuje kontextové tónovanie vlastných stavový riadok.

Dve snímky obrazovky vyššie ukazujú, ako by môj panel s upozorneniami vyzeral pri použití jednej z mnohých aplikácií prekrytia stavového riadka dostupných v Obchode Play. Tieto snímky obrazovky boli urobené na nerootovanom Huawei Mate 9 s EMUI 5.0. Pre tých z vás, ktorí nepoznajú EMUI, stavový riadok nevyzerá ako snímky obrazovky vyššie. Namiesto toho to vyzerá takto:

Ak vám nevadí, ako váš stavový riadok vyzerá, potom aplikácie ako napr Postavenie alebo Stavový riadok materiálu sú dary z nebies. Ale ak alebo keď sa vaše zariadenie aktualizuje na Android O, tieto aplikácie už nemusia fungovať. Takto vyzerajú tieto dve rovnaké aplikácie na zariadení Google Pixel so systémom Android O Developer Preview:

Namiesto toho, aby prekrytie blokovalo pôvodný stavový riadok, vyzerá to ako prekrytie sa prekrýva s pôvodným stavovým riadkom, čo má za následok obrovský neporiadok.

Žiaľ, toto efektívne robí aplikácie, ako sú tieto, zbytočnými. A nie sú to len vaše typické tematické aplikácie stavového riadka, ktoré sú ovplyvnené – ovplyvnené sú všetky aplikácie, ktoré vyžadujú zobrazenie prekrytia v hornej časti stavového riadka.

Tu je zoznam niektorých populárnych aplikácií, ktoré môžu byť zbytočné:

  • Postavenie (500 000 – 1 000 000 inštalácií)
  • Stavový riadok materiálu (1 000 000 – 5 000 000 inštalácií)
  • Cool Tool - Systémové štatistiky (500 000 – 1 000 000 inštalácií)
  • Telecine (50 000 – 100 000 inštalácií)
  • Vyčistiť stavový riadok (100 000 – 500 000 inštalácií)
  • Tinycore (100 000 – 500 000 inštalácií)

A zoznam niektorých aplikácií, ktoré budú fungovať, ale už sa nemôžu prekrývať v hornej časti stavového riadka (obmedzujúce predchádzajúce funkcie):

  • Súmrak (5 000 000 – 10 000 000 inštalácií)
  • Hlavy hore (100 000 – 500 000 inštalácií)
  • Mini monitor zdrojov (50 000 – 100 000 inštalácií)
  • Mini monitor siete (1 000 000 – 5 000 000 inštalácií)

V Obchode Play je oveľa viac aplikácií, ktoré používajú nejaké prekrytie v hornej časti stavového riadku, ale už teraz môžete povedať, že takáto zmena sa dotkne mnohých aplikácií, ktoré používajú potenciálne milióny používateľov. Tak čo sa tu deje?


Podpora TYPE_SYSTEM_OVERLAY je ukončená

S každou novou iteráciou Androidu Google zavádza aj zavrhuje (označuje ako zastarané a bude odstránené) rôzne funkcie. Tentoraz je funkcia, ktorá sa nachádza na bloku na sekanie, TYPE_SYSTEM_OVERLAY. Aby som citoval referenčná stránka za to, čo táto funkcia ponúkala vývojárom:

TYPE_SYSTEM_OVERLAY

Typ okna: systémové prekryvné okná, ktoré je potrebné zobraziť nad všetkým ostatným. Tieto okná nesmú zaostrovať vstup, inak budú prekážať pri ochrane klávesnice. Vo viacužívateľských systémoch sa zobrazuje iba v okne vlastníka.

Tento typ okna v podstate umožňuje aplikácii kresliť na akýkoľvek prvok na obrazovke – vrátane stavového riadka. Počnúc systémom Android O je však tento typ okna zastaraný. V prípade nesystémových aplikácií Google odporúča, aby vývojári namiesto toho použili TYPE_APPLICATION_OVERLAY. Aby som citoval referenčná stránka na čo robí tento nový typ okna:

TYPE_APPLICATION_OVERLAY

Typ okna: Prekryvné okná aplikácie sa zobrazujú nad všetkými oknami aktivít (typy medzi FIRST_APPLICATION_WINDOW a LAST_APPLICATION_WINDOW), ale pod kritickými systémovými oknami, ako je stavový riadok alebo editor IME.

Systém môže kedykoľvek zmeniť polohu, veľkosť alebo viditeľnosť týchto okien, aby znížil vizuálny neporiadok pre používateľa a tiež spravoval zdroje.

Systém upraví dôležitosť procesov s týmto typom okna, aby sa znížila šanca, že ich zabijak s nízkou pamäťou zabije.

V systémoch s viacerými používateľmi sa zobrazuje iba na obrazovke vlastníka.

Ako vidíte, tento nový typ okna umožňuje aplikáciám prekrývať obsah nad všetkými ostatnými oknami aktivít okrem "kritické systémové okná ako stavový riadok alebo IME" (IME označuje klávesnicu). To je v poriadku pre aplikácie, ako je Facebook Messenger, pretože četovacie hlavy poskytované touto aplikáciou nemajú žiadny účel sedieť v hornej časti stavového riadka, ale to negatívne ovplyvňuje väčšinu aplikácií, ktoré som spomenul vyššie.

Okrem toho sa zdá, že momentálne neexistuje riešenie, ktoré by vývojári mohli použiť. Dalo by sa očakávať, že s cieľom vyhnúť sa tomuto problému v systéme Android O vývojári jednoducho zostavia svoje aplikácie tak, aby zacielili na SDK 25 (Android 7.1.1). Ako však poukazuje na vývojár Status na Reddite, má Google vymenené TYPE_SYSTEM_OVERLAY s TYPE_APPLICATION_OVERLAY a zmena je nezávislé od cieľového SDK verzia. Vývojári používajúci TYPE_SYSTEM_OVERLAY v súčasnosti musia používať TYPE_APPLICATION_OVERLAY, aby si zachovali kompatibilitu, a preto bez ohľadu na to, na akej cieľovej verzii SDK je konkrétna aplikácia založená, môže už nepoužívajte TYPE_SYSTEM_OVERLAY v systéme Android O.


Čo sa s tým dá robiť?

Nie je presne jasné, prečo Google túto zmenu urobil, keďže zatiaľ neposkytol oficiálne vysvetlenie. Domnievam sa, že ide o pokus o zlepšenie zabezpečenia v systéme Android tým, že bráni nič netušiacim používateľom v náhodnej inštalácii aplikácií, ktoré zlomyseľne blokujú alebo nahrádzajú ich stavový riadok. Bohužiaľ, táto zmena zachytila ​​mnoho úplne legitímnych aplikácií, ktoré používajú TYPE_SYSTEM_OVERLAY v krížovej paľbe.

Vývojári, ktorí využívajú túto funkciu, otvorili hlásenia o chybách v nástroji Android Issue Tracker (#260787 a #36574245), aby protestovali proti zmene a požiadali o alternatívne rozhranie API, ale zamestnanec spoločnosti Google komentoval sledovač pomocou nasledujúce vyhlásenie:

Stav: neopraví sa (zamýšľané správanie)

Sledovali sme tím produktov a inžinierov a dostali sme návrh, že vývojári môžu použiť aktivity SHOW_WHEN_LOCKED na zobraziť, keď je zariadenie zamknuté, ale zámerne už nie je možné zobrazovať cez uzamknutú obrazovku / cez panel upozornení

Zatiaľ sa zdá, že títo vývojári majú smolu, pretože vývojári poukázali na to, že FLAG_SHOW_WHEN_LOCKED stále neumožňuje prekrytie okien v hornej časti stavového riadku. Nie je jasné, čo môžu vývojári týchto aplikácií robiť okrem toho, že sa modlia za to, aby Google veci zmenil, alebo v súvislosti s tým vyvolal peklo.

Keďže toto je len prvá ukážka vývojára pre Android O, Google ich stále môže zmeniť a poskytnúť túto funkciu pre aplikácie, ktoré nie sú zacielené na Android O, alebo pre Google na obnovenie TYPE_SYSTEM_OVERLAY. Ale ak veci zostanú tak, ako sú teraz, môžete dajte týmto aplikáciám zbohom. A to by bola sakra škoda.


Ďakujem Eli Irvinovi za testovanie mnohých z týchto aplikácií pre mňa!