„Android O“ laužo programas, kurios persidengia ant būsenos juostos

„Android O“ nebenaudoja TYPE_SYSTEM_OVERLAY ir yra TYPE_APPLICATION_OVERLAY, todėl programos, kurios persidengia ant būsenos juostos, sugenda.

Įrašų, kuriuose aprašomos naujos naudotojams skirtos funkcijos, gausybė Android O pradeda lėtėti dabar, kai naudotojai turėjo savaites išbandyti programinę įrangą savo įrenginyje. Tačiau po gaubtu padaryta daugybė pakeitimų, kurie pamažu atskleidžiami. Apie vieną tokį pakeitimą paskelbėme tik kitą dieną apie „Nexus“ ir „Pixel“ įrenginius, kuriuose veikia „Android O“. priima SDCardFS. Tačiau šiandien norėtume aptarti pakeitimą, kuris turės įtakos tam tikrų programų, ypač tų, kūrėjams perdanga būsenos juostos viršuje. Atrodo, kad šios programos yra sugadinta „Android O“ kūrėjo peržiūroje, kurią iš pirmo žvilgsnio galite atmesti kaip paprastą klaidą, tačiau pasinerdami į informacinius dokumentus, tai gali būti numatytas pakeitimas pateikė Google.


„Android O“ sulaužo būsenos juostos perdangas

Vienas iš mano mėgstamiausių dalykų, susijusių su „Android“, yra jo pritaikymas. Naudotojai, kurie yra įsišakniję arba naudoja pasirinktinius ROM, savo sistemos būsenos juostas gali pritaikyti savaime be jokių apribojimų, tačiau jei jūsų įrenginys neįsišaknijęs, turite mažiau galimybių. Laimei, „Google Play“ parduotuvėje yra daug programų, kurios leidžia pakeisti būsenos juostos išvaizdą pagrindiniu lygiu. Tai įmanoma dėl sumanaus „System Overlay Windows“ derinio, kad būtų rodoma pasirinktinė būsenos juosta virš esamos, Pranešimų klausytojai, kad būtų rodomi pranešimai, ir pasirinktinai pritaikymo neįgaliesiems paslauga, leidžianti pagal kontekstą atspalvinti tinkintą Būsenos juosta.

Aukščiau pateiktose dviejose ekrano kopijose parodyta, kaip atrodytų mano pranešimų juosta naudojant vieną iš daugelio „Play“ parduotuvėje pasiekiamų būsenos juostos perdangos programų. Šios ekrano kopijos buvo padarytos neįsišaknijusiame „Huawei Mate 9“, kuriame veikia EMUI 5.0. Tiems iš jūsų, kurie nėra susipažinę su EMUI, būsenos juosta atrodo nepanaši į aukščiau pateiktas ekrano kopijas. Vietoj to, tai atrodo taip:

Jei jums nerūpi, kaip atrodo jūsų akcijų būsenos juosta, tada tokios programos kaip Būsena arba Medžiagos būsenos juosta yra dievo dovana. Bet jei arba kai įrenginys atnaujinamas į „Android O“, šios programos gali nebeveikti. Štai kaip šios dvi programos atrodo „Google Pixel“, kurioje veikia „Android O“ kūrėjo peržiūra:

Užuot perdanga blokuoja pradinę būsenos juostą, ji atrodo kaip perdanga persidengia su pradine būsenos juosta, dėl kurios susidaro didžiulė netvarka.

Deja, dėl to tokios programos tampa nenaudingos. Ir tai turi įtakos ne tik tipinėms būsenos juostos teminėms programoms, paveikiamos visos programos, kurioms reikalinga perdanga, kuri būtų rodoma būsenos juostos viršuje.

Štai sąrašas populiarių programų, kurios gali tapti nenaudingos:

  • Būsena (500 000–1 000 000 įdiegimų)
  • Medžiagos būsenos juosta (1 000 000–5 000 000 įdiegimų)
  • Šaunus įrankis – sistemos statistika (500 000–1 000 000 įdiegimų)
  • Telecine (50 000–100 000 įdiegimų)
  • Išvalykite būsenos juostą (100 000–500 000 įdiegimų)
  • Tinycore (100 000–500 000 įdiegimų)

Ir kai kurių programų, kurios veiks, bet nebegali perdengti būsenos juostos viršuje, sąrašas (apriboja ankstesnes funkcijas):

  • Prieblanda (5 000 000–10 000 000 įdiegimų)
  • Galvas aukštyn (100 000–500 000 įdiegimų)
  • Mini išteklių monitorius (50 000–100 000 įdiegimų)
  • Mini tinklo monitorius (1 000 000–5 000 000 įdiegimų)

„Play“ parduotuvėje yra daug daugiau programų, kurios naudoja tam tikrą perdangą būsenos juostos viršuje, tačiau Jau dabar galite pasakyti, kad toks pakeitimas turės įtakos daugeliui programų, kurias naudoja potencialiai milijonai vartotojų. Taigi, kas čia vyksta?


TYPE_SYSTEM_OVERLAY nebenaudojamas

Su kiekviena nauja „Android“ iteracija „Google“ pristato ir panaikina (priskiriama kaip pasenusioms ir turi būti pašalinta) įvairias funkcijas. Šį kartą pjaustymo bloke esanti funkcija yra TYPE_SYSTEM_OVERLAY. Cituoti informacinis puslapis ką ši funkcija pasiūlė kūrėjams:

TYPE_SYSTEM_OVERLAY

Lango tipas: sistemos perdangos langai, kurie turi būti rodomi virš visų kitų. Šie langai neturi fokusuoti įvesties, kitaip jie trukdys klaviatūros apsaugai. Kelių vartotojų sistemose rodoma tik turinčio vartotojo lange.

Iš esmės šis lango tipas leidžia programai piešti ant bet kurio ekrano elemento, įskaitant būsenos juostą. Tačiau pradedant „Android O“, šis lango tipas buvo nebenaudojamas. Nesisteminėms programoms „Google“ rekomenduoja kūrėjams naudoti TYPE_APPLICATION_OVERLAY. Cituoti informacinis puslapis ką veikia šis naujas lango tipas:

TYPE_APPLICATION_OVERLAY

Lango tipas: programos perdangos langai rodomi virš visų veiklos langų (tipai tarp FIRST_APPLICATION_WINDOW ir LAST_APPLICATION_WINDOW), bet po svarbiais sistemos langais, pvz., būsenos juosta arba IME.

Sistema gali bet kada pakeisti šių langų padėtį, dydį ar matomumą, kad sumažintų vizualinę netvarką vartotojui ir valdytų išteklius.

Sistema pakoreguos procesų su šio tipo langais svarbą, kad sumažintų tikimybę, kad mažai atminties turintis žudikas juos nužudys.

Kelių vartotojų sistemose rodoma tik turinčio vartotojo ekrane.

Kaip matote, šis naujas lango tipas leidžia programoms perdengti turinį ant visų kitų veiklos langų išskyrus „kritiniai sistemos langai, tokie kaip būsenos juosta arba IME“ (IME reiškia klaviatūrą). Tai tinka tokioms programoms kaip „Facebook Messenger“, nes šios programos teikiamos pokalbių antraštės neturi tikslo sėdėti būsenos juostos viršuje, tačiau tai neigiamai veikia daugumą anksčiau minėtų programų.

Be to, šiuo metu kūrėjams nėra tinkamo sprendimo. Galima tikėtis, kad norėdami išvengti šios problemos „Android O“, kūrėjai tiesiog kuria savo programas pagal SDK 25 („Android 7.1.1“). Tačiau, kaip nurodė „Status“ kūrėjas „Reddit“., „Google“ turi pakeistas TYPE_SYSTEM_OVERLAY su TYPE_APPLICATION_OVERLAY, o pakeitimas yra nepriklauso nuo tikslinio SDK versija. Kūrėjai, naudojantys TYPE_SYSTEM_OVERLAY, šiuo metu turi naudoti TYPE_APPLICATION_OVERLAY, kad išlaikytų suderinamumą, taigi, nesvarbu, kokia tiksline SDK versija yra pagrįsta konkreti programa, ji gali nebenaudokite TYPE_SYSTEM_OVERLAY sistemoje „Android O“..


Ką galima dėl to padaryti?

Tiksliai neaišku, kodėl „Google“ padarė šį pakeitimą, nes jie dar nepateikė oficialaus paaiškinimo. Spėju, kad tai bandymas pagerinti „Android“ saugumą, neleidžiant nieko neįtariantiems vartotojams netyčia įdiegti programų, kurios piktybiškai blokuoja arba pakeičia jų būsenos juostą. Deja, šis pakeitimas užfiksuoja daugybę visiškai teisėtų programų, kurios kryžminėje ugnyje naudoja TYPE_SYSTEM_OVERLAY.

Šią funkciją naudojantys kūrėjai atidarė klaidų ataskaitas „Android“ problemų sekimo programoje (#260787 ir #36574245) protestuoti prieš pakeitimą ir paprašyti alternatyvios API, tačiau „Google“ darbuotojas pakomentavo stebėjimo priemonę su sekantį teiginį:

Būsena: nebus ištaisyta (numatytas elgesys)

Susisiekėme su produkto ir inžinierių komanda ir gavome pasiūlymą, kad kūrėjai galėtų naudoti SHOW_WHEN_LOCKED veiklą rodyti, kai įrenginys užrakintas, bet tyčia nebeįmanoma rodyti užrakinimo ekrane / virš pranešimų skydelio

Kol kas atrodo, kad šiems kūrėjams nesiseka, nes kūrėjai atkreipė dėmesį, kad FLAG_SHOW_WHEN_LOCKED vis tiek neleidžia langų uždengti būsenos juostos viršuje. Neaišku, ką gali daryti šių programų kūrėjai, išskyrus melstis, kad „Google“ pakeistų dalykus arba pakeltų pragarą.

Kadangi tai tik pirmoji kūrėjo peržiūra, skirta „Android O“, „Google“ vis tiek gali ją pakeisti ir teikti šią funkciją programoms, kurios netaikomos „Android O“, arba „Google“ atkurti TYPE_SYSTEM_OVERLAY. Bet jei viskas išliks taip, kaip yra dabar, galite atsisveikink su šiomis programėlėmis. Ir tai būtų velniškai gaila.


Dėkojame Eli Irvin, kad išbandė daugelį šių programų!