Dlaczego aktualizacje aplikacji czasami psują motywy podłoża

Na motywy podłoża często niekorzystnie wpływa częstotliwość aktualizacji aplikacji innych firm, zwłaszcza gdy motywy muszą dostosowywać się do słabo zakodowanych aplikacji

Jest to częste zjawisko: użytkownicy instalują motywy Substratum na swoich telefonach, a następnie aktualizują Slack, WhatsApp, Instagram lub dowolną liczbę innych aplikacji ze Sklepu Play. Nagle nie mogą nawet otworzyć tych aplikacji, dopóki ich nakładki motywów nie zostaną wyłączone. Wielu nowszych użytkowników Substratum wyraziło swoje doświadczenia z tym problemem od czasu wydania motyw Substratum bez korzeni dla Androida Oreo.

Czasami przebudowa nakładek w Substratum rozwiązuje problem, ale czasami nie zadziała, dopóki twórca motywu nie zaktualizuje motywu ponownie. W tym drugim przypadku użytkownicy muszą korzystać z aplikacji, których dotyczy problem, w stanie magazynowym bez motywu. Nie trzeba dodawać, że dla wielu może to być frustrujące doświadczenie.

Problem jest zwykle wynikiem połączenia czynników: źle zakodowanej aplikacji innej firmy, częstych aktualizacji wspomniane aplikacje, które w rzeczywistości powodują więcej problemów niż naprawiają, oraz ograniczenia w usłudze Overlay Manager Service (OMS) struktura. Rozmawiałem z kilkoma znanymi tematami, którzy przedstawili kilka cennych spostrzeżeń na ten temat:

Jeremy’ego Becka, kto sprawia Widmo Motyw podłoża i Davida Wilsona z Dominacja sława.

Według niezłomnych zwolenników Substratum do najpopularniejszych należą najgorsi przestępcy w dziedzinie źle zakodowanych aplikacji. WhatsApp, Instagram, Slack, Facebook i Telegram to przykłady, które twórcy Substratum przytaczali nam, opowiadając o tym problemie. W rzeczywistości David stwierdził, że są to przykłady „strasznie, obrzydliwie, nikczemnie zakodowanych” aplikacji, co barwnie ilustruje Frustracja, z jaką spotykają się twórcy motywów Substratum, gdy starają się uszczęśliwić swoich użytkowników, próbując ujednolicić doświadczenia z Androidem wokół wspólny temat.

Na przykład „nikczemnie zakodowana” aplikacja może powiązać kolor tekstu z kolorem tła w swoim plikucolors.xml. Jeśli w tym przykładzie motyw zmieni kolor tła tak, aby nie był już biały, tekst również ulegnie zmianie i może stać się trudniejszy (lub nawet niemożliwy) do odczytania. W związku z tym osoba tworząca motyw będzie musiała dodać własne pliki XML układu do nakładek motywu, aby określić oddzielne kolory tekstu i tła.

Zastrzeżenie polega na tym, że nowe pliki xml muszą również zawierać każdy pojedynczy znak kodu z plików oryginalnej aplikacji o tej samej nazwie więc żadna funkcjonalność nie zostanie utracona. Dzieje się tak, ponieważ OMS czyta z zastępczego pliku motywu, podczas gdy sama aplikacja próbuje zrobić wszystko, na co pozwala oryginalny plik. Kiedy aplikacja zostanie zaktualizowana i wprowadzana jest nawet najmniejsza, niezwiązana zmiana do oryginalnych plików XML, nakładki nie będą działać.

Oto jak David to wyjaśnia:

To, co robią ci absurdalni „programiści” (używam tego określenia luźno, opisując tych klaunów), polega na tym, że używają przedmiotów w xml układu, co utrudnia nam prawidłowe ustawienie motywu aplikacji bez dodawania tych plików xml układu do naszej nakładki.

Aby dać ci przykład, weźmy WhatsApp i spójrzmy na element w ich /res/values/colors.xml, który jest #ffffffff

Używają @color/white zarówno dla kolorów tekstu, jak i kolorów tła w całej swojej aplikacji. Oznacza to, że jeśli motyw chce zmienić kolor „biały” na coś ciemnego, aby przyciemnić tło, spowoduje to również przyciemnienie dużej ilości tekstu, co jest bardzo złe.

Aby obejść tę wadę, twórcy dodadzą pliki XML układu do swojej nakładki i zmienią kolor tekstu lub kolor tła lub oba z będąc czymś w rodzaju Android: back="@color/white" do czegoś w stylu Android: back="@*android: color/background_dark" aby przyciemnić tło.

To jest świetne rozwiązanie i sprawia, że ​​tło jest ciemne, ale układ XML musi zawierać wszystko, co ma oryginalny układ XML, co może różnić się od kilku do ponad 100 linii. W tych wierszach układu XML może znajdować się wiele różnych zasobów znajdujących się w oryginalnym kodzie aplikacji, które są wywoływane, takich jak identyfikatory, wymiary, ciągi znaków, style itp.

I tu właśnie leży problem... jeśli motyw tworzy nakładkę pasującą do WhatsApp 2.17.323 i aktualizacji WhatsApp do wersji 2.17.351 (na przykład), to jeśli WhatsApp w swojej nieskończonej mądrości zdecyduje się na zmianę nazwę, powiedzmy, ciągu znaków, który znajdował się w nakładce utworzonej dla wersji 2.17.323, a ten ciąg już nie istnieje w wersji 2.17.351, wówczas nakładka nie powiedzie się zbudować.

To samo dotyczy wszystkiego, co znajduje się w nakładce, a także dowolnego kodu wywołującego zasób znajdujący się w aplikacji, jeśli ten konkretny zasób został w aplikacji, dla której zaprojektowano nakładkę, a następnie aplikacja zostanie zaktualizowana i zasób nie będzie już znajdował się w kodzie aplikacji, wówczas nakładka nie zostanie skompilowana.

To tylko jeden przykład gry w kotka i myszkę polegającej na naprzemiennych aktualizacjach aplikacji i motywów, z którymi muszą się zmierzyć twórcy Substratum. Kiedy motywatorzy obsługują dużą liczbę aplikacji innych firm, muszą kilkakrotnie pomnożyć tę grę przy każdej aktualizacji motywu. To niekończący się cykl śledzenia wielu obsługiwanych aplikacji i nadziei, że sfrustrowani użytkownicy nie ocenią źle swoich motywów pomiędzy aktualizacjami ponieważ Slack (dla innego przykładu) przepuścił trzy aktualizacje swojej aplikacji w ciągu dwóch tygodni od ostatniej aktualizacji ich ulubionej aplikacji obsługującej Slack temat.

Co możesz z tym zrobić?

Osobiście zazwyczaj czekam na tzw zaktualizuj moje ulubione motywy, zanim zaktualizuję jakiekolwiek aplikacje, których używam które są tematyczne. To powiedziawszy, nie każdy motyw ma czas na ciągłe przesyłanie aktualizacji, aby nadążać za aktualizacjami aplikacji, więc Twój przebieg może się różnić. Jeśli naprawdę nie możesz znieść korzystania z aplikacji w stanie pozbawionym motywu, być może czekanie kilku godzin lub dni nie jest dla Ciebie wielkim problemem. Jeśli jednak oznacza to zerwanie umowy, być może zechcesz motywować tylko aplikacje systemowe, które prawdopodobnie nie ulegną zmianie w najbliższym czasie (takie jak SystemUI lub Android Framework).

Po prostu zdaj sobie sprawę, że problem nie jest spowodowany samym Substratum lub motywami Substratum i nie obwiniaj twórcy motywu, gdy coś pójdzie nie tak. Z tego powodu silniki motywów w wersjach OEM Androida, takich jak EMUI, Samsung Experience lub LG UX, nie pozwalają na tworzenie motywów poza aplikacjami systemowymi i samym interfejsem użytkownika systemu. Aby cieszyć się poziomem dostosowania oferowanym przez Substratum, kompromisem jest to, że być może będziesz musiał chwilę poczekać, aby cieszyć się najnowszą aktualizacją aplikacji.