Hvorfor appoppdateringer noen ganger bryter underlagstemaer

Substratum-temaer påvirkes ofte negativt av frekvensen av oppdateringer til tredjepartsapper, spesielt når temaer må tilpasse seg dårlig kodede.

Det er en vanlig hendelse: brukere bruker Substratum-temaer på telefonene sine og oppdaterer senere Slack, WhatsApp, Instagram eller en rekke andre apper fra Play Store. Plutselig kan de ikke engang åpne disse appene før temaoverleggene deres er deaktivert. Mange nyere Substratum-brukere har gitt uttrykk for sine erfaringer med dette problemet helt siden utgivelsen av rotløs Substratum-tema for Android Oreo.

Noen ganger løser gjenoppbygging av overleggene i Substratum problemet, men noen ganger vil det ikke fungere før temautvikleren oppdaterer temaet igjen. I det siste tilfellet står brukere fast og må bruke de berørte appene i deres ikke-tema, aksjestater. Unødvendig å si at dette kan være en frustrerende opplevelse for mange.

Problemet er vanligvis et resultat av en kombinasjon av faktorer: en dårlig kodet tredjepartsapp, hyppige oppdateringer til nevnte apper som faktisk forårsaker flere problemer enn de fikser, og begrensninger i Overlay Manager Service (OMS) rammeverk. Jeg snakket med et par kjente temaer som ga noen verdifulle innsikter i problemet:

Jeremy Beck, som lager Spektrum Substratum tema, og David Wilson av Dominans berømmelse.

I følge disse Substratum-trofaste er noen av de verste lovbryterne i riket med dårlig kodede apper blant de mest populære. WhatsApp, Instagram, Slack, Facebook og Telegram er eksempler som disse Substratum-temaene siterte for oss da de fortalte om dette problemet. Faktisk sa David at de er eksempler på "forferdelig, motbydelig, avskyelig kodede" apper, som fargerikt illustrerer frustrasjon som utviklere av Substratum-temaer møter når de holder brukerne fornøyde mens de prøver å forene sine Android-opplevelser rundt en felles tema.

For eksempel kan en "avskyelig kodet" app knytte tekstfargen til bakgrunnsfargen i dens colors.xml-fil. Hvis et tema endrer bakgrunnsfargen til ikke lenger å være hvit i dette eksemplet, vil teksten også bli endret og kan gjøres vanskeligere (eller til og med umulig) å lese. Følgelig vil temaet måtte legge til sine egne layout-xml-filer til temaoverleggene for å spesifisere separate farger for tekst og bakgrunn.

Forbeholdet er at de nye xml-filene også må inkludere hvert eneste tegn i koden fra den originale appens filer med samme navn så ingen funksjonalitet går tapt. Dette er fordi OMS leser fra erstatningen, temaets fil mens appen selv prøver å gjøre alt den originale filen tillot. Når appen er oppdatert og selv den minste urelaterte endring gjøres til de originale xml-filene, vil overleggene ikke fungere.

Slik forklarer David det:

Det disse latterlige "utviklerne" (jeg bruker det begrepet løst når jeg beskriver disse klovnene) gjør, er at de bruker gjenstander i layout-xml-er som gjør det vanskelig for oss å tematisere appen riktig uten å legge til disse layout-xml-ene i overlegget vårt.

For å gi deg et eksempel, la oss ta WhatsApp og se på et element i deres /res/values/colors.xml som er #ffffffff

De bruker @color/white for både tekstfarger og bakgrunnsfarger gjennom hele appen. Dette betyr at hvis et tema ønsker å endre fargen på "hvitt" til noe mørkt for å gjøre bakgrunnen mørk, så vil det gjøre mye tekst mørk også, noe som er veldig dårlig.

For å omgå denne mangelen vil temaer legge til layout-xml-ene i overlegget og endre enten tekstfargen eller bakgrunnsfargen eller begge deler fra være noe som android: background="@color/white" til noe som android: background="@*android: color/background_dark" for å gjøre bakgrunnen mørk.

Nå er dette flott og gjør bakgrunnen mørk, men xml-oppsettet må inkludere alt i den originale xml-oppsettet, som kan variere fra noen få linjer til over 100 linjer. Innenfor disse linjene i oppsettet kan xml være mange forskjellige ressurser som ligger inne i appens originale kode som blir kalt på, for eksempel ids, dimensjoner, strenger, stiler, etc etc.

Nå ligger problemet her... hvis et tema lager et overlegg som passer til WhatsApp 2.17.323 og WhatsApp oppdaterer til 2.17.351 (for eksempel), så hvis WhatsApp i sin uendelige visdom bestemmer seg for å endre navnet på for eksempel en streng som var i overlegget laget for 2.17.323 og den strengen ikke eksisterer lenger i 2.17.351, så vil ikke overlegget lykkes bygge.

Det samme gjelder for alt innenfor overlegget som er i en hvilken som helst kode som kaller på en ressurs som er i appen, hvis den bestemte ressursen var i appen som overlegget er designet for, og deretter oppdateres appen og ressursen ikke lenger er i appens kode, vil ikke overlegget kompileres.

Dette er bare ett eksempel på katt-og-mus-spillet med alternerende app- og temaoppdateringer som Substratum-temaer står overfor. Når temaer støtter et stort antall tredjepartsapper, må de multiplisere dette spillet flere ganger med hver temaoppdatering. Det er en uendelig syklus med å holde tritt med flere støttede apper og håpe at frustrerte brukere ikke vurderer temaene deres dårlig mellom oppdateringene fordi Slack (for et annet eksempel) presset tre oppdateringer til appen deres i løpet av de to ukene siden siste oppdatering av deres favoritt Slack-støtte tema.

Hva kan du gjøre med det?

Personlig venter jeg vanligvis på en oppdater til favoritttemaene mine før jeg oppdaterer apper jeg bruker som er tema. Når det er sagt, har ikke alle temaer tid til konstant å pushe oppdateringer for å holde tritt med disse appoppdateringene, så kjørelengden din kan variere. Hvis du virkelig ikke tåler å bruke en app i dens tilstand uten tema, er det kanskje ikke så stor sak for deg å vente noen timer eller dager. Hvis dette imidlertid er en avtalebryter, kan det hende du ønsker å bare tematisere systemapplikasjoner som neppe kommer til å endre seg snart (som SystemUI eller Android Framework).

Bare innse at problemet ikke er på grunn av selve Substratum eller Substratum-temaer, og vær så snill å ikke klandre temautvikleren når noe går galt. Dette er grunnen til at temamotorer på OEM-smaker av Android som EMUI, Samsung Experience eller LG UX ikke lar deg tematisere mer enn systemapper og selve systemgrensesnittet. For å nyte nivået av tilpasning som Substratum tilbyr, er avveiningen at du kanskje må vente en kort stund for å nyte den siste appoppdateringen.