Miks rakenduste värskendused mõnikord rikuvad aluspinna teemasid?

Kolmandate osapoolte rakenduste värskenduste sagedus mõjutab sageli ebasoodsalt substraadi teemasid, eriti kui teemad peavad kohanema halvasti kodeeritud teemadega.

See on tavaline nähtus: kasutajad rakendavad oma telefonile Substratumi teemasid, seejärel värskendavad hiljem Play poest Slacki, WhatsAppi, Instagrami või paljusid muid rakendusi. Järsku ei saa nad neid rakendusi isegi avada, kuni nende teemade ülekatted on keelatud. Paljud uuemad Substratumi kasutajad on avaldanud oma kogemusi selle probleemiga alates väljalaskmisest Android Oreo juurteta aluspinna teema.

Mõnikord lahendab probleemi Substratumi ülekatete ümberehitamine, kuid mõnikord ei tööta see enne, kui teemaarendaja teemat uuesti värskendab. Viimasel juhul on kasutajad ummikus kasutama mõjutatud rakendusi oma teemavabas aktsiaolekus. Ütlematagi selge, et see võib paljude jaoks olla masendav kogemus.

Probleem on tavaliselt mitme tegurite kombinatsiooni tulemus: halvasti kodeeritud kolmanda osapoole rakendus, sagedased värskendused need rakendused, mis tegelikult põhjustavad rohkem probleeme kui parandavad, ja Overlay Manager Service'i (OMS) piirangud raamistik. Rääkisin paari tuntud teemaga, kes andsid selle probleemi kohta väärtuslikke teadmisi:

Jeremy Beck, kes teeb Spekter Aluspinna teema ja David Wilson kohta Domineerimine kuulsus.

Nende Substratum'i teadlaste sõnul on mõned halvasti kodeeritud rakenduste valdkonna halvimad rikkujad ühed populaarsemad. WhatsApp, Instagram, Slack, Facebook ja Telegram on näited, mida need Substratumi teemad meile seda probleemi käsitledes viitasid. Tegelikult ütles David, et need on näited "kohutavalt, vastikult, põlastusväärselt kodeeritud" rakendustest, mis illustreerib värvikalt pettumus, millega substraadi teemade arendajad silmitsi seisavad, kui nad oma kasutajaid rahulolevana hoiavad, kui nad üritavad oma Androidi kogemusi ühendada ühine teema.

Näiteks võib põlastusväärselt kodeeritud rakendus siduda teksti värvi taustavärviga failis colors.xml. Kui teema muudab selle näite taustavärvi nii, et see ei oleks enam valge, muudetakse ka teksti ja seda võib raskendada (või isegi võimatuks muuta). Järelikult peab teemaja lisama oma teemaülekatetele oma paigutusega xml-failid, et määrata tekstile ja taustale eraldi värvid.

Hoiatus on see, et uued xml-failid peavad samuti sisaldama iga koodimärk algse rakenduse sama nimega failidest seega ei lähe ükski funktsionaalsus kaotsi. Selle põhjuseks on asjaolu, et OMS loeb asendusfaili, themer'i faili, samal ajal kui rakendus proovib ise teha kõike, mida algfail lubas. Kui rakendust värskendatakse ja tehakse isegi vähimgi mitteseotud muudatus algsetele xml-failidele, ei tööta ülekatted.

David selgitab seda järgmiselt:

Mida need naeruväärsed "arendajad" (kasutan seda terminit nende klounide kirjeldamisel lõdvalt) teevad, on see, et nad kasutavad objekte paigutuse xml-id, mis raskendavad rakenduse õiget teemat ilma neid paigutuse xml-e meie ülekattesse lisamata.

Näite andmiseks võtame WhatsAppi ja vaatame failis /res/values/colors.xml üksust, mis on #ffffffff

Nad kasutavad kogu oma rakenduses nii tekstivärvide kui ka taustavärvide jaoks @color/white. See tähendab, et kui teemaja soovib muuta "valge" värvi millekski tumedaks, et muuta nende taust tumedaks, muudab see ka suure osa tekstist tumedaks, mis on väga halb.

Selle puuduse kõrvaldamiseks lisavad thers paigutuse xml-id oma ülekattele ja muudavad teksti või taustavärvi või mõlemat. on midagi nagu android: background="@color/white" millekski nagu android: background="@*android: color/background_dark", et muuta taust tumedaks.

Nüüd on see suurepärane ja muudab tausta tumedaks, kuid paigutuse xml peab sisaldama kõike, mis algse paigutuse xml-is on, mis võib varieeruda mõnest reast kuni 100 reani. Xml-i paigutuse nendel ridadel võib olla palju erinevaid ressursse, mis asuvad rakenduse algses koodis, mida kutsutakse, näiteks ID-d, dimensioonid, stringid, stiilid jne.

Nüüd peitubki probleem... kui teemaja teeb ülekatte, et see sobiks WhatsApp 2.17.323 ja WhatsApp värskendab näiteks versioonile 2.17.351, siis kui WhatsApp otsustab oma lõputu tarkuse järgi muuta kui stringi nimi, mis oli ülekattes, on tehtud 2.17.323 jaoks ja seda stringi pole enam versioonis 2.17.351, siis ülekate ei õnnestu ehitada.

Sama kehtib kõige kohta ülekattes, mis on mis tahes koodis, mis kutsub rakenduses asuvat ressurssi, kui see konkreetne ressurss oli äpis, mille jaoks ülekate oli mõeldud ja siis rakendus uueneb ja ressurssi pole enam rakenduse koodis, siis ülekatet ei kompileerita.

See on vaid üks näide kassi-hiire mängust, mis sisaldab vahelduvaid rakenduste ja teemade värskendusi, millega Substratumi teemajad silmitsi seisavad. Kui teemad toetavad suurt hulka kolmandate osapoolte rakendusi, peavad nad seda mängu iga teemavärskendusega mitu korda korrutama. See on lõputu tsükkel, kus ollakse kursis mitme toetatud rakendusega ja loodavad, et pettunud kasutajad ei hinda oma teemasid värskenduste vahel halvasti sest Slack (teine ​​näide) edastas oma rakendusele kolm värskendust kahe nädala jooksul pärast nende lemmik Slacki toetava versiooni viimast värskendust. teema.

Mida saate sellega teha?

Mina isiklikult ootan tavaliselt an enne kasutatavate rakenduste värskendamist oma lemmikteemadele mis on teemakohased. Sellegipoolest pole kõigil teemadel aega nende rakenduste värskendustega sammu pidamiseks pidevalt värskendusi edastada, seega võib teie läbisõit varieeruda. Kui te tõesti ei talu rakenduse kasutamist selle teemata olekus, siis võib-olla pole mõne tunni või päeva ootamine teie jaoks nii suur asi. Kui see on siiski tehingu katkestamine, võiksite võib-olla teemastada ainult süsteemirakendusi, mis tõenäoliselt niipea ei muutu (nt SystemUI või Android Framework).

Pidage meeles, et probleem ei ole tingitud Substraadist endast ega Substratumi teemadest, ja ärge süüdistage teema arendajat, kui midagi läheb valesti. See on põhjus, miks Androidi originaalseadmete tootjate (nt EMUI, Samsung Experience või LG UX) teemamootorid ei võimalda teil teemasid luua rohkem kui süsteemirakendused ja süsteemi kasutajaliides ise. Substratumi pakutava kohandamistaseme nautimiseks on kompromiss see, et peate võib-olla veidi ootama, et seda rakenduse värskendust nautida.