Nicht viele wissen davon, und Google wirbt selten darüber, aber das Betriebssystem Android hat bereits seit einigen Jahren ein Theming-Framework eingebaut. Es wird als Runtime Resource Overlay Framework (kurz: RRO) bezeichnet und reduziert den Aufwand für die Erstellung benutzerdefinierter Designs für Ihr Telefon erheblich.
Mit RRO können Sie schnell Themen erstellen, die das Aussehen und Verhalten fast jeder App ändern, die auf einem Android-Gerät installiert ist. Da die Komponenten der Systembenutzeroberfläche von Android, einschließlich der Navigationsleiste, der Statusleiste, der Benachrichtigungsleiste und der Schnelleinstellungsleiste, selbst zu einer App gehören, können Sie auch ihr Aussehen ändern. Und das Beste daran ist, dass Sie keinerlei Java-Code schreiben müssen.
Was ist der Haken, fragst du? Das Framework kann nur von privilegierten Apps verwendet werden. Insbesondere durch Apps, die an einem Speicherort installiert werden, auf den nur der Root-Benutzer oder jemand, der ein benutzerdefiniertes ROM erstellt, zugreifen kann.
In diesem kurzen Tipp zeige ich Ihnen, wie Sie mit dem Framework ein einfaches Design erstellen, das das Erscheinungsbild der Schnelleinstellungsleiste ändert.
Um folgen zu können, benötigen Sie Folgendes:
Wenn Sie das Android SDK noch nie über die Befehlszeile verwendet haben und mit der Android-Firmware nicht vertraut sind, ist das Lesen der folgenden Lernprogramme eine gute Idee:
Obwohl die Geschäftslogik einer Android-App in Java oder Kotlin geschrieben ist, wird ihre Benutzeroberfläche hauptsächlich mit XML-Dateien erstellt. Eine gut geschriebene Android-App verfügt über separate XML-Ressourcen, die Layouts, Farben, Zeichenfolgen und Attribute definieren. Im Namen des RRO-Frameworks können Sie diese XML-Ressourcen mit Ihren eigenen benutzerdefinierten XML-Ressourcen überlagern. Es ist jedoch nicht nur auf XML-Ressourcen beschränkt. Außerdem können Sie die Zeichensätze und Schriftarten einer App ändern.
Eine App, die das RRO-Framework verwendet, enthält normalerweise keinen Java-Code. Es besteht nur aus XML-Dateien und ggf. Schriftarten und Bildern. Wie alle Android-Apps muss es jedoch eine gültige und signierte APK sein.
Wir benötigen Android Studio nicht, um ein Projekt zu erstellen, das das RRO-Framework verwendet. Für den Moment benötigen Sie nur ein neues Projektverzeichnis und eine AndroidManifest.xml Datei. Sie können sie entweder mit einem Dateiexplorer oder einem Terminal erstellen.
mkdir MyOverlays && cd MyOverlays berühren AndroidManifest.xml
Die Manifestdatei muss den Paketnamen Ihrer Anwendung und den Paketnamen der Anwendung enthalten, für die Sie Überlagerungen erstellen. Da wir heute das Aussehen der Schnelleinstellungen ändern möchten, müssen wir dies verwenden com.android.systemui
als Zielpaketname.
An dieser Stelle können wir mit dem Einrichten der Taskleiste für schnelle Einstellungen und aller anderen Komponenten der Android-System-Benutzeroberfläche beginnen.
Um eine Ressource der Zielanwendung überlagern zu können, muss Ihre Anwendung über eine Ressource mit demselben Namen verfügen. Wenn Sie beispielsweise die Farben der Zielanwendung ändern möchten, müssen Sie normalerweise deren Farben überlagern colors.xml Feile mit deiner eigenen colors.xml Datei.
Um Ihnen die Arbeit zu erleichtern, erwartet das RRO-Framework nicht, dass die Überlagerung umfassend ist und alle Details der ursprünglichen Ressource verarbeiten kann. Mit anderen Worten, Ihre Überlagerung muss nur die Details enthalten, die Sie ändern möchten.
Um die Dinge klarer zu machen, wollen wir die Hintergrundfarbe der Schnelleinstellungsleiste von standardmäßig blau-grau in ein tiefes Orange ändern. Der Wert der Farbe wird in angegeben res / values / colors.xml Datei der System-UI-App. Wenn Sie sich für den Inhalt interessieren, können Sie die Datei im offiziellen Android-Git-Repository betrachten.
Um die Farbe zu ändern, müssen Sie jetzt ein erstellen res / values / colors.xml Datei in Ihrem Projekt.
mkdir -p res / values berühren Sie res / values / colors.xml
In der colors.xml Datei, um die Hintergrundfarbe des Tabletts zu ändern, müssen wir eine Farbe mit dem Namen angeben system_primary_color
. Fügen Sie der Datei daher folgendes XML hinzu:
# FFBF360C
Es ist erwähnenswert, dass sich das obige XML nicht von dem XML unterscheidet, das Sie beim Erstellen normaler Apps mit Android Studio verwenden würden.
Unser einfaches Thema ist fertig! Wenn Sie möchten, können Sie weitere hinzufügen
Tags für die Datei, um andere Farben der Systembenutzeroberfläche zu ändern.
Wir verwenden jetzt das Android Asset Packaging Tool, aapt
kurz, das ist ein Teil des Android SDK, um unser einfaches Projekt in eine APK-Datei umzuwandeln, die von der Android-Plattform verwendet werden kann.
Um die APK zu generieren, müssen Sie einfach zeigen aapt
zur Manifestdatei, die res Verzeichnis und die Zielplattform android.jar Datei. Natürlich müssen Sie auch den Namen angeben, den Sie der APK-Datei geben möchten.
aapt-Paket -M AndroidManifest.xml -S res / \ -I ~ / Android / Sdk / Plattformen / android-23 / android.jar \ -F myoverlays.apk.u
Im obigen Befehl können Sie sehen, dass ich die APK-Datei benannt habe myoverlays.apk.u. Das liegt daran, dass unsere APK derzeit nicht signiert und unsigniert ist.
Um es zu unterschreiben, müssen Sie die jarsigner
Werkzeug. Für den Moment empfehle ich, dass Sie es mit dem standardmäßigen Android-Debug-Keystore signieren.
jarsigner -keystore ~ / .android / debug.keystore \ myoverlays.apk.u androiddebugkey
Zum Schluss müssen Sie die APK mit Hilfe des APK ausrichten und somit optimieren Zipalign
Werkzeug. Als Eingabe erwartet das Tool die Namen der nicht ausgerichteten und ausgerichteten APKs sowie eine Zahl, die die Ausrichtungsgrenzen angibt. Ab 2017 kann die Anzahl nichts anderes sein 4
.
zipalign 4 myoverlays.apk.u myoverlays.apk
Um ein APK zu installieren, das das RRO-Framework verwendet, müssen Sie es einfach in das / system / verkäufer / überlagerung Verzeichnis. Das Verzeichnis gehört standardmäßig zu einem schreibgeschützten Dateisystem und ist nur für den root-Benutzer zugänglich. Wenn Sie ein benutzerdefinierter ROM-Entwickler sind oder Ihr Android-Gerät gerootet haben, sollten Sie keine Probleme bei der Installation des APK haben.
In diesem kurzen Tipp zeige ich Ihnen jedoch, wie Sie den APK auf einem Emulator installieren. Auf diese Weise können Sie das Overlay testen, ohne das Telefon zu gefährden.
Starten Sie mit dem Starten eines Emulators im beschreibbaren Dateisystemmodus Emulator
Befehlszeilenprogramm.
Emulator -avd Nexus_5X_API_23 -beschreibbares System
Sie können jetzt die adb
Werkzeug, um Root-Berechtigungen für den Emulator zu erhalten, falls Sie diese noch nicht haben.
ADB-Wurzel
Als nächstes montieren Sie den /System Dateisystem als schreibbar, erneut mit adb
.
adb remount
Das / system / verkäufer / überlagerung Das Verzeichnis existiert nicht im Emulator. Sie müssen es manuell erstellen. Der einfachste Weg ist das Starten einer Shell auf dem Emulator.
Adb-Shell mkdir -p / system / vendor / overlay beendet
Schieben Sie schließlich die APK in das Verzeichnis mit adb
.
adb push myoverlays.apk / system / anbieter / überlagerung
Warten Sie einige Sekunden, bis Android den APK erkannt und installiert hat, und starten Sie den Emulator neu, damit das Design wirksam wird.
Nach dem Neustart sollten Sie das Motiv in Aktion sehen können, wenn Sie die Schnelleinstellungsleiste herunterziehen.
In diesem kurzen Tipp haben Sie erfahren, wie Sie das Framework für die Laufzeit-Ressourcenüberlagerung verwenden, um Designs für Android zu erstellen. Obwohl das von uns erstellte Thema extrem einfach war, können Sie die heute erworbenen Fähigkeiten anwenden, um weitaus komplexere Themen zu erstellen. Zum Beispiel können Sie das überlagern strings.xml Datei, um die Bezeichnungen der UI-Elemente zu ändern, die eine App anzeigt. Ebenso können Sie das überlagern dimens.xml Datei, um die Größe der Benutzeroberflächenelemente einer App zu ändern.
Die Dokumentation zum RRO-Framework ist sehr selten. Dennoch können Sie viel darüber erfahren, wenn Sie den Quellcode der Android-Plattform durchsuchen.
Während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Android-Entwicklung!