Android O rikub rakendusi, mis katavad olekuriba peal

Android O kaotab tüübi TYPE_SYSTEM_OVERLAY ja valib rakenduse TYPE_APPLICATION_OVERLAY, mistõttu olekuriba peal kattuvad rakendused purunevad.

Sissejuhatus postitusi, mis kirjeldavad uusi kasutajale suunatud funktsioone Android O hakkab aeglustuma nüüd, kui kasutajatel on olnud nädalaid aega oma seadme tarkvara testimiseks. Siiski on kapoti all tehtud palju, palju muudatusi, mis on aeglaselt paljastatud. Postitasime just eelmisel päeval ühe sellise muudatuse kohta Android O-d kasutavate Nexuse ja Pixeli seadmete kohta SDCardFS-i vastuvõtmine. Kuid täna tahaksime arutada muudatust, mis mõjutab teatud rakenduste, eriti nende, arendajaid ülekate olekuriba peal. Need rakendused näivad olevat Android O arendaja eelvaates katki, mida võite esmapilgul pidada lihtsaks veaks, kuid viitedokumentidesse süvenedes võib see olla kavandatud muudatus Google'i poolt.


Android O katkestab olekuriba ülekatted

Üks minu lemmikasju Androidi juures on selle kohandatavus. Kasutajad, kes on juurdunud või kasutavad kohandatud ROM-e, saavad oma süsteemi olekuribadele sisuliselt ilma piiranguteta teemastada, kuid kui teie seade on juurutamata, on teil vähem valikuid. Õnneks on Google Play poes palju rakendusi, mis võimaldavad teil põhitasemel olekuriba välimust muuta. See on võimalik tänu nutikale System Overlay Windowsi kombinatsioonile, et kuvada olemasoleva olekuriba kohal kohandatud olekuriba, Märguandekuulajad märguannete kuvamiseks ja valikuliselt juurdepääsetavuse teenus, mis võimaldab kohandatud seadeid kontekstipõhiselt toonida olekuriba.

Kaks ülaltoodud ekraanipilti näitavad, milline näeks välja minu teavitusriba, kui kasutan ühte paljudest Play poes saadaolevatest olekuriba ülekatterakendustest. Need ekraanipildid tehti juurdumata Huawei Mate 9-ga, millel töötab EMUI 5.0. Neile teist, kes pole EMUI-ga tuttav, ei näe olekuriba välja nagu ülaltoodud ekraanipildid. Selle asemel näeb see välja selline:

Kui te ei häiri seda, kuidas teie aktsia olekuriba välja näeb, siis sellised rakendused nagu Olek või Materjali olekuriba on jumala kingitused. Kui või kui teie seade värskendab versiooni Android O, ei pruugi need rakendused enam töötada. Need kaks rakendust näevad Android O arendaja eelvaadet kasutavas Google Pixelis välja järgmiselt.

Selle asemel, et algset olekuriba blokeeriv ülekate, näeb see välja nagu ülekate kattuvad algse olekuribaga, mille tulemuseks on tohutu segadus.

Kahjuks muudab see sellised rakendused kasutuks. Ja see ei mõjuta ainult teie tüüpilisi olekuriba teemarakendusi - mõjutatud on kõik rakendused, mille olekuribal kuvatakse ülekate.

Siin on nimekiri populaarsetest rakendustest, mis võivad kasutuks muutuda:

  • Olek (500 000–1 000 000 installimist)
  • Materjali olekuriba (1 000 000–5 000 000 installimist)
  • Lahe tööriist – süsteemistatistika (500 000–1 000 000 installimist)
  • Telecine (50 000–100 000 installimist)
  • Puhastage olekuriba (100 000–500 000 installimist)
  • Tinycore (100 000–500 000 installimist)

Ja mõnede rakenduste loend, mis töötavad, kuid ei saa enam olekuriba peal katta (piirab varasemaid funktsioone):

  • Hämar (5 000 000–10 000 000 installimist)
  • HeadsUp (100 000–500 000 installimist)
  • Ressursimonitor Mini (50 000–100 000 installimist)
  • Võrgumonitor Mini (1 000 000–5 000 000 installimist)

Play poes on palju rohkem rakendusi, mis kasutavad olekuriba peal mingit ülekatet, kuid võite juba öelda, et selline muudatus mõjutab paljusid rakendusi, mida kasutavad potentsiaalselt miljonid kasutajad. Mis siin siis toimub?


TYPE_SYSTEM_OVERLAY tugi katkestatakse

Iga uue Androidi iteratsiooniga tutvustab Google erinevaid funktsioone ja kaotab nende kasutuse (määrab vananenuks ja eemaldatavaks). Seekord on tükeldamise plokis olev funktsioon TYPE_SYSTEM_OVERLAY. Tsiteerides viiteleht mida see funktsioon arendajatele pakkus:

TYPE_SYSTEM_OVERLAY

Akna tüüp: süsteemi katteaknad, mida tuleb kuvada kõige muu peal. Need aknad ei tohi keskenduda sisendile, vastasel juhul häirivad need klahviluku tööd. Mitme kasutajaga süsteemides kuvatakse ainult omaniku aknas.

Sisuliselt võimaldab see aknatüüp rakendusel joonistada ekraani mis tahes elemendi peale, sealhulgas olekuribale. Kuid alates Android O-st on see aknatüüp aegunud. Süsteemiväliste rakenduste puhul soovitab Google arendajatel kasutada rakendust TYPE_APPLICATION_OVERLAY. Tsiteerides viiteleht mida see uus aknatüüp teeb:

TYPE_APPLICATION_OVERLAY

Akna tüüp: rakenduse ülekatte aknad kuvatakse kõigi tegevusakende kohal (tüübid vahemikus FIRST_APPLICATION_WINDOW ja LAST_APPLICATION_WINDOW), kuid kriitiliste süsteemiakende (nt olekuriba või IME) all.

Süsteem võib nende akende asukohta, suurust või nähtavust igal ajal muuta, et vähendada kasutaja visuaalset segadust ja hallata ka ressursse.

Süsteem kohandab seda tüüpi aknaga protsesside tähtsust, et vähendada võimalust, et vähese mäluga tapja need tapab.

Mitme kasutajaga süsteemides kuvatakse ainult omaniku ekraanil.

Nagu näete, võimaldab see uus aknatüüp rakendustel sisu katta kõigi muude tegevusakende peale välja arvatud "kriitilised süsteemiaknad, nagu olekuriba või IME" (IME viitab klaviatuurile). See sobib selliste rakenduste jaoks nagu Facebook Messenger, kuna selle rakenduse pakutavatel vestluspeadel pole olekuriba peal istumist, kuid see mõjutab negatiivselt enamikku varem mainitud rakendustest.

Lisaks ei tundu arendajatel praegu olevat lahendust, mida arendajad saaksid kasutada. Võib eeldada, et Android O-s selle probleemi vältimiseks loovad arendajad lihtsalt oma rakendused SDK 25 (Android 7.1.1) sihtimiseks. Kuid nagu märkis Status arendaja Redditis, Google'il on asendatud TYPE_SYSTEM_OVERLAY rakendusega TYPE_APPLICATION_OVERLAY ja muudatus on sõltumatu siht-SDK-st versioon. Arendajad, kes kasutavad rakendust TYPE_SYSTEM_OVERLAY, peavad praegu ühilduvuse säilitamiseks kasutama rakendust TYPE_APPLICATION_OVERLAY, seega olenemata sellest, millisel siht-SDK versioonil konkreetne rakendus põhineb, saab see ei kasuta enam Android O-s TYPE_SYSTEM_OVERLAY-d.


Mida saab selle vastu ette võtta?

Pole täpselt selge, miks Google selle muudatuse tegi, kuna nad pole veel ametlikku selgitust esitanud. Arvan, et see on katse parandada Androidi turvalisust, takistades pahaaimamatutel kasutajatel kogemata installida rakendusi, mis nende olekuriba pahatahtlikult blokeerivad või asendavad. Kahjuks tabab see muudatus paljusid täiesti seaduslikke rakendusi, mis kasutavad risttules tüüp TYPE_SYSTEM_OVERLAY.

Seda funktsiooni kasutavad arendajad on avanud veaaruanded Androidi probleemide jälgijas (#260787 ja #36574245), et protestida muudatuse vastu ja küsida alternatiivset API-d, kuid Google'i töötaja kommenteeris jälgijat rakendusega järgmine avaldus:

Olek: ei parandata (kavatsetud käitumine)

Oleme toote- ja insenerimeeskonnaga ühendust võtnud ning saanud soovituse, et arendajad saaksid kasutada SHOW_WHEN_LOCKED tegevusi näidata, kui seade on lukus, kuid seda pole tahtlikult enam võimalik kuvada üle lukustusekraani / märguandeala

Praegu näib, et neil arendajatel ei veda, sest arendajad on juhtinud tähelepanu sellele, et FLAG_SHOW_WHEN_LOCKED ei luba ikka veel aknaid olekuriba peal katta. Pole selge, mida nende rakenduste arendajad saavad teha, välja arvatud palvetada, et Google muudaks asju või tõstaks selle üle põrgu.

Kuna see on alles esimene Android O arendaja eelvaade, on Google'il siiski võimalik neid muuta meeles ja pakkuda seda funktsiooni rakendustele, mis ei sihi Android O-d, või et Google saaks taastada TYPE_SYSTEM_OVERLAY. Aga kui asjad jäävad nii, nagu nad praegu on, saate seda teha suudle neid rakendusi hüvasti. Ja sellest oleks pagana kahju.


Täname Eli Irvinit paljude nende rakenduste minu jaoks testimise eest!