Android O avvikler TYPE_SYSTEM_OVERLAY til fordel for TYPE_APPLICATION_OVERLAY, noe som resulterer i at apper som overlegger på toppen av statuslinjen bryter.
Overfloden av innlegg som skisserer nye brukervendte funksjoner funnet i Android O begynner å avta nå som brukere har hatt uker på seg til å teste programvaren på enheten. Imidlertid er det mange, mange endringer gjort under panseret som sakte blir avdekket. Vi la ut om en slik endring her om dagen om Nexus- og Pixel-enheter som kjører Android O ta i bruk SDCardFS. Men i dag vil vi diskutere en endring som vil påvirke utviklere av visse apper, spesielt de som overlegg på toppen av statuslinjen. Disse applikasjonene ser ut til å være ødelagt i Android O Developer Preview, som du ved første øyekast kan avvise som en enkel feil, men dykker dypere inn i referansedokumentasjonen, kan dette være en tiltenkt endring av Google.
Android O bryter statuslinjeoverlegg
En av mine favoritt ting med Android er hvor tilpassbar den er. Brukere som er forankret eller kjører egendefinerte ROM-er, kan tematisere systemstatuslinjene sine naturlig uten noen begrensninger, men hvis enheten din ikke er rotet, har du færre alternativer tilgjengelig for deg. Heldigvis er det mange applikasjoner i Google Play Store som lar deg endre hvordan statuslinjen ser ut på et grunnleggende nivå. Dette er mulig takket være en smart kombinasjon av System Overlay Windows for å vise en tilpasset statuslinje over den eksisterende, Varslingslyttere for å vise varsler, og eventuelt en tilgjengelighetstjeneste for å tillate kontekstuell fargetoning av tilpasset statuslinjen.
De to skjermbildene ovenfor viser hvordan varslingslinjen min vil se ut når jeg bruker en av de mange statuslinjeoverleggsappene som er tilgjengelige i Play Store. Disse skjermbildene ble tatt på en urotet Huawei Mate 9 som kjører EMUI 5.0. For de av dere som ikke er kjent med EMUI, ser statuslinjen ikke ut som skjermbildene ovenfor. I stedet ser det slik ut:
Hvis du ikke har noe imot hvordan aksjestatuslinjen din ser ut, kan apper som f.eks Status eller Materialstatuslinje er gudegaver. Men hvis, eller når enheten din oppdateres til Android O, kan det hende at disse appene ikke lenger fungerer. Slik ser de samme to appene ut på en Google Pixel som kjører Android O Developer Preview:
I stedet for at overlegget blokkerer den opprinnelige statuslinjen, ser det ut som overlegget overlapper med den originale statuslinjen som resulterer i et stort rot.
Dessverre gjør dette apper som disse effektivt ubrukelige. Og det er ikke bare dine typiske statuslinjetemaapplikasjoner som påvirkes av dette - alle apper som krever at et overlegg vises på toppen av statuslinjen, påvirkes.
Her er en liste over noen populære apper som kan bli ubrukelige:
- Status (500 000 - 1 000 000 installasjoner)
- Materialstatuslinje (1 000 000–5 000 000 installasjoner)
- Kult verktøy - Systemstatistikk (500 000 - 1 000 000 installasjoner)
- Telecine (50 000–100 000 installasjoner)
- Rengjør statuslinje (100 000–500 000 installasjoner)
- Tinycore (100 000–500 000 installasjoner)
Og en liste over noen apper som vil fungere, men som ikke lenger kan legges på toppen av statuslinjen (begrenser tidligere funksjonalitet):
- Skumring (5 000 000 - 10 000 000 installasjoner)
- HeadsUp (100 000–500 000 installasjoner)
- Resource Monitor Mini (50 000–100 000 installasjoner)
- Network Monitor Mini (1 000 000–5 000 000 installasjoner)
Det er mange flere apper i Play-butikken som bruker en slags overlegg på toppen av statuslinjen, men du kan allerede se at en slik endring vil påvirke mange apper som brukes av potensielt millioner av brukere. Så hva skjer her?
TYPE_SYSTEM_OVERLAY blir avviklet
Med hver ny iterasjon av Android både introduserer og avvikler Google (utpeker som foreldet og skal fjernes) ulike funksjoner. Denne gangen er funksjonen som er på hakkeblokken TYPE_SYSTEM_OVERLAY. For å sitere referanseside for hva denne funksjonen tilbød utviklere:
TYPE_SYSTEM_OVERLAY
Vindutype: systemoverleggsvinduer, som må vises på toppen av alt annet. Disse vinduene må ikke ta inndatafokus, ellers vil de forstyrre tastelåsen. I flerbrukersystemer vises kun på eierens vindu.
I hovedsak lar denne vindustypen en app tegne på toppen av et hvilket som helst element på skjermen – inkludert statuslinjen. Fra og med Android O har imidlertid denne vindustypen blitt avviklet. For ikke-systemapper anbefaler Google at utviklere bruker TYPE_APPLICATION_OVERLAY i stedet. For å sitere referanseside for hva denne nye vindustypen gjør:
TYPE_APPLICATION_OVERLAY
Vindutype: Programoverleggsvinduer vises over alle aktivitetsvinduer (typer mellom
FIRST_APPLICATION_WINDOW
ogLAST_APPLICATION_WINDOW
), men under kritiske systemvinduer som statuslinjen eller IME.Systemet kan endre plasseringen, størrelsen eller synligheten til disse vinduene når som helst for å redusere visuell rot for brukeren og også administrere ressurser.
Systemet vil justere viktigheten av prosesser med denne vindustypen for å redusere sjansen for at lav-minne-killer dreper dem.
I flerbrukersystemer vises kun på eierens skjerm.
Som du kan se, lar denne nye vindustypen apper legge innhold på toppen av alle andre aktivitetsvinduer unntatt "kritiske systemvinduer som statuslinjen eller IME" (IME refererer til tastaturet). Dette er greit for apper som Facebook Messenger, ettersom chathodene levert av den appen ikke har noen hensikt på toppen av statuslinjen, men dette påvirker de fleste appene jeg nevnte tidligere negativt.
Videre ser det ikke ut til å være en løsning for utviklere å bruke på dette tidspunktet. Man kan forvente at utviklere ganske enkelt bygger appene sine for å målrette mot SDK 25 (Android 7.1.1) for å unngå dette problemet på Android O. Imidlertid, som påpekt av utvikler av Status på Reddit, har Google erstattet TYPE_SYSTEM_OVERLAY med TYPE_APPLICATION_OVERLAY, og endringen er uavhengig av mål-SDK versjon. Utviklere som bruker TYPE_SYSTEM_OVERLAY må for øyeblikket bruke TYPE_APPLICATION_OVERLAY for å opprettholde kompatibilitet, og uansett hvilken mål-SDK-versjon en bestemt app er basert på, kan den ikke lenger bruker TYPE_SYSTEM_OVERLAY på Android O.
Hva kan gjøres med dette?
Det er ikke helt klart hvorfor Google har gjort denne endringen, siden de ennå ikke har gitt en offisiell forklaring. Min gjetning er at det er et forsøk på å forbedre sikkerheten på Android ved å forhindre intetanende brukere fra å installere apper som ondsinnet blokkerer eller erstatter statuslinjen deres. Dessverre fanger denne endringen mange helt legitime applikasjoner som bruker TYPE_SYSTEM_OVERLAY i kryssilden.
Utviklere som bruker denne funksjonen har åpnet feilrapporter på Androids Issue Tracker (#260787 og #36574245) for å protestere mot endringen og be om en alternativ API, men en Googler kommenterte sporeren med følgende uttalelse:
Status: Vil ikke fikse (tiltenkt oppførsel)
Vi har fulgt opp med produkt- og ingeniørteamet og fått forslag om at utviklere kan bruke SHOW_WHEN_LOCKED aktiviteter for å vis når enheten er låst, men det er med vilje ikke lenger mulig å vise over låseskjermen / over varslingsskjermen
Foreløpig ser det ut til at disse utviklerne er uheldige, ettersom utviklere har påpekt at FLAG_SHOW_WHEN_LOCKED fortsatt ikke tillater at vinduer legges over statuslinjen. Det er ikke klart hva utviklere av disse appene kan gjøre, bortsett fra å be om at Google skal endre ting, eller gjøre helvete om det.
Siden dette bare er den første utviklerforhåndsvisningen for Android O, er det fortsatt mulig for Google å endre deres tanker og gi denne funksjonaliteten for apper som ikke er målrettet mot Android O, eller for Google å gjenopprette TYPE_SYSTEM_OVERLAY. Men hvis ting forblir slik de er nå, kan du kyss disse appene farvel. Og det ville vært synd.
Takk til Eli Irvin for å ha testet mange av disse appene for meg!