Er zijn er niet veel van op de hoogte, en Google adverteert het zelden, maar het Android-besturingssysteem heeft al een paar jaar een thematisch kader ingebouwd. Het wordt het Runtime Resource Overlay-framework genoemd, kortweg RRO, en het vermindert de benodigde inspanning om aangepaste thema's voor uw telefoon te maken aanzienlijk..
Met RRO kunt u snel thema's maken die het uiterlijk van bijna elke app die op een Android-apparaat is geïnstalleerd, kunnen veranderen. Omdat de systeemgebruikersinterfacecomponenten van Android, inclusief de navigatiebalk, de statusbalk, het meldingenvak en het snelle instellingenvak zelf bij een app horen, kunt u hun uiterlijk ook wijzigen. En het beste is dat je helemaal geen Java-code hoeft te schrijven.
Wat is de vangst, vraag je? Welnu, het framework kan alleen worden gebruikt door geprivilegieerde apps. Meer specifiek, door apps die zijn geïnstalleerd op een locatie die alleen toegankelijk is voor de rootgebruiker, of door iemand die een aangepast ROM maakt.
In deze snelle tip laat ik je zien hoe je het framework kunt gebruiken om een eenvoudig thema te maken dat het uiterlijk van de lade voor snelle instellingen verandert.
Om dit te kunnen volgen, hebt u het volgende nodig:
Als u de Android SDK nog nooit via de opdrachtregel hebt gebruikt en niet bekend bent met Android-firmware, is het een goed idee om de volgende zelfstudies te lezen:
Hoewel de bedrijfslogica van een Android-app is geschreven in Java of Kotlin, wordt de gebruikersinterface voornamelijk gemaakt met behulp van XML-bestanden. Een goed geschreven Android-app heeft afzonderlijke XML-bronnen die de lay-outs, kleuren, tekenreeksen en kenmerken definiëren. Het RRO-raamwerk, zoals de naam al doet vermoeden, laat u deze XML-bronnen overlay met uw eigen aangepaste XML-bronnen. Het is echter niet beperkt tot alleen XML-bronnen. U kunt ook de tekentabellen en lettertypen van een app wijzigen.
Een app die het RRO-framework gebruikt, bevat meestal geen Java-code. Het is alleen samengesteld uit XML-bestanden en, indien nodig, lettertypen en afbeeldingen. Niettemin moet het, net als alle Android-apps, een geldige en ondertekende APK zijn.
We hebben Android Studio niet nodig om een project te maken dat het RRO-framework gebruikt. Voor nu is alles wat je nodig hebt een nieuwe projectdirectory en een AndroidManifest.xml het dossier. Je bent vrij om ze te maken met een bestandsverkenner of een terminal.
mkdir MyOverlays && cd MyOverlays raken AndroidManifest.xml aan
Het manifestbestand moet de pakketnaam van uw toepassing bevatten en de pakketnaam van de toepassing waarvoor u overlays maakt. Omdat we vandaag het uiterlijk van de lade voor snelle instellingen willen wijzigen, moeten we dit gebruiken com.android.systemui
als de naam van het doelpakket.
Op dit moment zijn we klaar om de snelinstellingen-lade en alle andere componenten van de gebruikersinterface van het Android-systeem te thematiseren.
Als u een resource van de doeltoepassing wilt overlappen, moet uw toepassing een resource hebben met dezelfde naam. Als u bijvoorbeeld de kleuren van de doeltoepassing wilt wijzigen, moet u deze meestal overlappen colors.xml bestand met uw eigen colors.xml het dossier.
Om dingen gemakkelijk voor u te maken, verwacht het RRO-framework niet dat de overlay volledig is en in staat is om alle details in de originele resource te verwerken. Met andere woorden, uw overlay hoeft alleen die details te hebben die u wilt wijzigen.
Om dingen duidelijker te maken, laten we zeggen dat we de achtergrondkleur van de lade voor snelle instellingen willen wijzigen van de standaard blauwgrijs tot dieprood. De waarde van de kleur wordt gespecificeerd in de res / waarden / colors.xml bestand van de systeem-UI-app. Als je nieuwsgierig bent naar de inhoud, kun je het bestand in de officiële Android Git-repository bekijken.
Als u de kleur wilt wijzigen, moet u nu een maken res / waarden / colors.xml bestand in uw project.
mkdir -p res / values touch res / values / colors.xml
Binnen in de colors.xml bestand, om de achtergrondkleur van de lade te wijzigen, moeten we een naam met de naam targeten system_primary_color
. Voeg daarom de volgende XML toe aan het bestand:
# FFBF360C
Het is vermeldenswaard dat de bovenstaande XML niet verschilt van de XML die u zou gebruiken bij het maken van normale apps met Android Studio.
Ons eenvoudige thema is klaar! Als je wilt, kun je meer toevoegen
tags aan het bestand om andere kleuren van de gebruikersinterface van het systeem te wijzigen.
We zullen nu de Android Asset Packaging Tool gebruiken, aapt
Kortom, dat is een onderdeel van de Android SDK, om ons eenvoudige project om te zetten in een APK-bestand dat kan worden gebruikt door het Android-platform.
Als u de APK wilt genereren, moet u gewoon wijzen aapt
naar het manifestbestand, de res directory en de doelplatforms android.jar het dossier. Natuurlijk moet u ook de naam opgeven die u aan het APK-bestand wilt geven.
aapt-pakket -M AndroidManifest.xml -S res / \ -I ~ / Android / Sdk / platforms / android-23 / android.jar \ -F myoverlays.apk.u
In de bovenstaande opdracht kunt u zien dat ik heb gekozen om het APK-bestand een naam te geven myoverlays.apk.u. Dat komt omdat onze APK momenteel zowel niet-ondertekend als niet-gericht is.
Om het te ondertekenen, moet u de jarsigner
tool. Voorlopig raad ik aan om het te ondertekenen met de standaard Android debug keystore.
jarsigner -keystore ~ / .android / debug.keystore \ myoverlays.apk.u androiddebugkey
Ten slotte moet u de APK uitlijnen met, en dus optimaliseren, met behulp van de zipalign
tool. Als invoer verwacht de tool de namen van de niet-uitgelijnde en uitgelijnde APK's, samen met een getal dat de uitlijningsgrenzen aangeeft. Vanaf 2017 kan het nummer niets anders zijn dan 4
.
zipalign 4 myoverlays.apk.u myoverlays.apk
Als u een APK met het RRO-framework wilt installeren, moet u deze eenvoudig in de map plaatsen / System / verkoper / overlay directory. De map behoort standaard tot een alleen-lezen bestandssysteem en is alleen toegankelijk voor de root-gebruiker. Als u een aangepaste ROM-ontwikkelaar bent of uw Android-apparaat hebt geroot, zou u geen problemen moeten hebben om de APK te installeren.
In deze snelle tip laat ik u echter zien hoe u de APK op een emulator kunt installeren. Op deze manier kunt u de overlay testen zonder uw telefoon in gevaar te brengen.
Begin met het activeren van een emulator in de beschrijfbare bestandssysteemmodus met behulp van de emulator
opdrachtregelprogramma.
emulator -avd Nexus_5X_API_23 -writable-system
U kunt nu de adb
hulpmiddel om rootprivileges te verkrijgen op de emulator, als je die nog niet hebt.
adb root
Plaats vervolgens de /systeem bestandssysteem als beschrijfbaar, opnieuw met behulp van adb
.
adb opnieuw plaatsen
De / System / verkoper / overlay map bestaat niet op de emulator. Je moet het zelf handmatig maken. De eenvoudigste manier om dit te doen is door een shell op de emulator te starten.
adb shell mkdir -p / system / vendor / overlay exit
Druk tot slot op de APK om naar de map te gaan met adb
.
adb push myoverlays.apk / system / vendor / overlay
Wacht een paar seconden tot Android de APK detecteert en installeert en start de emulator vervolgens opnieuw om het thema te activeren.
Na het opnieuw opstarten, als u de lade voor snelle instellingen naar beneden trekt, zou u het thema in actie moeten kunnen zien.
In deze snelle tip hebt u geleerd hoe u met het Runtime Resource Overlay-framework thema's voor Android kunt maken. Hoewel het thema dat we hebben gemaakt extreem eenvoudig was, kun je de vaardigheden die je vandaag hebt opgedaan, toepassen om veel complexere thema's te maken. U kunt bijvoorbeeld de strings.xml bestand om de labels van de UI-elementen te wijzigen die een app weergeeft. Op dezelfde manier kunt u de dimens.xml bestand om de grootte van de UI-elementen van een app te wijzigen.
Documentatie over het RRO-framework is erg schaars. Toch kun je er veel over te weten komen door de broncode van het Android-platform te overlopen.
Kijk terwijl je hier bent naar enkele van onze andere berichten over Android-ontwikkeling!