Substratum-Themes werden häufig durch die Häufigkeit von Updates für Apps von Drittanbietern beeinträchtigt, insbesondere wenn sich Themes an schlecht codierte Apps anpassen müssen
Es kommt häufig vor: Benutzer wenden Substratum-Designs auf ihre Telefone an und aktualisieren später Slack, WhatsApp, Instagram oder eine Reihe anderer Apps aus dem Play Store. Plötzlich können sie diese Apps nicht einmal mehr öffnen, bis ihre Theme-Overlays deaktiviert sind. Viele neuere Substratum-Benutzer haben seit der Veröffentlichung von ihre Erfahrungen mit diesem Problem geäußert rootless Substratum-Design für Android Oreo.
Manchmal behebt das Neuaufbauen der Overlays in Substratum das Problem, aber manchmal funktioniert es nicht, bis der Theme-Entwickler das Theme erneut aktualisiert. Im letzteren Fall müssen Benutzer die betroffenen Apps nicht mehr in ihrem nicht themenbezogenen Standardzustand verwenden. Es versteht sich von selbst, dass dies für viele eine frustrierende Erfahrung sein kann.
Das Problem ist normalerweise das Ergebnis einer Kombination mehrerer Faktoren: eine schlecht codierte Drittanbieter-App, häufige Aktualisierungen besagte Apps, die tatsächlich mehr Probleme verursachen als sie beheben, und Einschränkungen im Overlay Manager Service (OMS) Rahmen. Ich habe mit einigen bekannten Themen gesprochen, die einige wertvolle Einblicke in das Thema gegeben haben:
Jeremy Beck, wer macht das Spektrum Substratthema und David Wilson von Herrschaft Ruhm.Laut diesen Substratum-Anhängern gehören einige der schlimmsten Übeltäter im Bereich schlecht codierter Apps zu den beliebtesten. WhatsApp, Instagram, Slack, Facebook und Telegram sind Beispiele, die uns diese Substratum-Themer als Beispiele für dieses Problem nannten. Tatsächlich sagte David, es handele sich um Beispiele für „schrecklich, ekelhaft, verabscheuungswürdig codierte“ Apps, was das anschaulich veranschaulicht Entwickler von Substratum-Themen sind frustriert, wenn sie ihre Benutzer bei Laune halten, während sie versuchen, ihre Android-Erlebnisse rund um ein zu vereinheitlichen geläufiges Thema.
Beispielsweise könnte eine „abscheulich codierte“ App die Textfarbe mit der Hintergrundfarbe in ihrer Datei „colors.xml“ verknüpfen. Wenn ein Themer in diesem Beispiel die Hintergrundfarbe so ändert, dass sie nicht mehr weiß ist, wird auch der Text geändert und könnte schwerer (oder sogar unmöglich) lesbar werden. Folglich muss der Themer seine eigenen Layout-XML-Dateien zu seinen Theme-Overlays hinzufügen, um separate Farben für Text und Hintergrund festzulegen.
Die Einschränkung besteht darin, dass die neuen XML-Dateien auch enthalten müssen jedes einzelne Codezeichen aus den gleichnamigen Dateien der Original-App es geht also keine Funktionalität verloren. Dies liegt daran, dass OMS aus der Ersatzdatei des Themers liest, während die App selbst versucht, alles zu tun, was die Originaldatei zulässt. Wenn die App aktualisiert wird und selbst die kleinste, nicht zusammenhängende Änderung wird vorgenommen Wenn Sie die Original-XML-Dateien nicht kopieren, funktionieren die Overlays nicht.
So erklärt David es:
Was diese lächerlichen „Entwickler“ (ich verwende diesen Begriff locker, wenn ich diese Clowns beschreibe) tun, ist, dass sie Gegenstände in verwenden Layout-XMLs, die es uns erschweren, die App richtig zu thematisieren, ohne diese Layout-XMLs in unser Overlay einzufügen.
Um Ihnen ein Beispiel zu geben, nehmen wir WhatsApp und schauen uns ein Element in der Datei /res/values/colors.xml an
#ffffffff Sie verwenden @color/white sowohl für Textfarben als auch für Hintergrundfarben in ihrer gesamten App. Das heißt, wenn ein Theme die Farbe „Weiß“ in etwas Dunkles ändern möchte, um seinen Hintergrund dunkel zu machen, wird dadurch auch viel Text dunkel, was sehr schlecht ist.
Um diesen Mangel zu umgehen, fügen die Benutzer die Layout-XMLs in ihr Overlay ein und ändern entweder die Textfarbe oder die Hintergrundfarbe oder beides so etwas wie android: background="@color/white" in etwas wie android: background="@*android: color/background_dark" umwandeln, um den Hintergrund dunkel zu machen.
Das ist großartig und macht den Hintergrund dunkel, aber die Layout-XML muss alles enthalten, was die ursprüngliche Layout-XML enthält, was von einigen Zeilen bis zu über 100 Zeilen variieren kann. In diesen Zeilen der Layout-XML können sich viele verschiedene Ressourcen befinden, die sich im ursprünglichen Code der App befinden und aufgerufen werden, wie z. B. IDs, Abmessungen, Zeichenfolgen, Stile usw. usw.
Hier liegt nun das Problem... Wenn ein Themer beispielsweise ein Overlay für WhatsApp 2.17.323 und WhatsApp-Updates auf 2.17.351 erstellt, dann entscheidet sich WhatsApp in seiner unendlichen Weisheit für eine Änderung B. eine Zeichenfolge, die im für 2.17.323 erstellten Overlay enthalten war und diese Zeichenfolge in 2.17.351 nicht mehr existiert, wird das Overlay nicht erfolgreich ausgeführt bauen.
Das Gleiche gilt für alles innerhalb des Overlays, das sich in jedem Code befindet, der eine Ressource innerhalb der App aufruft, sofern diese bestimmte Ressource vorhanden ist in der App, für die das Overlay entwickelt wurde, und dann wird die App aktualisiert und die Ressource befindet sich nicht mehr im Code der App, dann wird das Overlay nicht kompiliert.
Dies ist nur ein Beispiel für das Katz-und-Maus-Spiel abwechselnder App- und Theme-Updates, mit dem Substratum-Themen konfrontiert sind. Wenn Themes eine große Anzahl von Apps von Drittanbietern unterstützen, müssen sie dieses Spiel mit jedem Theme-Update um ein Vielfaches vervielfachen. Es ist ein nie endender Kreislauf, bei dem man mit mehreren unterstützten Apps Schritt hält und hofft, dass frustrierte Benutzer ihre Themes zwischen den Updates nicht schlecht bewerten weil Slack (als weiteres Beispiel) in den zwei Wochen seit dem letzten Update seiner Lieblings-Slack-Unterstützung drei Updates für seine App veröffentlicht hat Thema.
Was können Sie dagegen tun?
Persönlich warte ich normalerweise auf eine Aktualisieren Sie auf meine Lieblingsthemen, bevor ich die von mir verwendeten Apps aktualisiere die thematisch sind. Allerdings hat nicht jeder Themer die Zeit, ständig Updates zu pushen, um mit diesen App-Updates Schritt zu halten, sodass Ihr Kilometerstand variieren kann. Wenn Sie es wirklich nicht ertragen können, eine App ohne Thema zu verwenden, ist es für Sie vielleicht kein so großes Problem, ein paar Stunden oder Tage zu warten. Wenn dies jedoch ein Problem darstellt, möchten Sie vielleicht nur Systemanwendungen thematisieren, die sich in absehbarer Zeit wahrscheinlich nicht ändern werden (z. B. SystemUI oder das Android Framework).
Beachten Sie einfach, dass das Problem nicht auf Substratum selbst oder Substratum-Themes zurückzuführen ist, und geben Sie bitte nicht dem Theme-Entwickler die Schuld, wenn etwas schief geht. Aus diesem Grund können Sie mit Theme-Engines auf OEM-Versionen von Android wie EMUI, Samsung Experience oder LG UX nicht mehr als nur System-Apps und die Benutzeroberfläche des Systems thematisieren. Um in den Genuss des von Substratum gebotenen Anpassungsniveaus zu kommen, müssen Sie möglicherweise eine kurze Weile warten, bis Sie das neueste App-Update genießen können.