Rask Tips Tema Android Med Runtime Resource Overlay Framework

Ikke mange vet om det, og Google annonserer sjelden det, men Android-operativsystemet har hatt et temaramme som er bygget inn i det i noen år nå. Den kalles Runtime Resource Overlay-rammeverket, RRO for kort, og det reduserer dramatisk arbeidet som trengs for å lage egendefinerte temaer for telefonen din.

Med RRO kan du raskt lage temaer som kan endre utseendet på nesten alle appene som er installert på en Android-enhet. Fordi Android-systemgrensesnittkomponenter, inkludert navigasjonslinjen, statuslinjen, varslingsbrettet og hurtiginnstillingsbrettet, tilhører selv en app, kan du også endre deres utseende. Og det beste ved det er at du ikke trenger å skrive noen Java-kode overhodet.

Hva er fangsten, spør du? Vel, rammen kan bare brukes av privilegerte apper. Nærmere bestemt, av apper som er installert på et sted som bare kan nås av roten brukeren, eller av noen som lager en tilpasset ROM.

I dette raske tipset vil jeg vise deg hvordan du bruker rammen til å lage et enkelt tema som endrer utseendet til hurtiginnstillingsbrettet.

Forutsetninger

For å kunne følge med, trenger du følgende:

  • en Android-emulator som kjører Android Marshmallow eller høyere
  • den nyeste versjonen av Android SDK

Hvis du aldri har brukt Android SDK fra kommandolinjen og ikke er kjent med Android-firmware, vil det være lurt å lese følgende opplæringsprogrammer:

Hva gjør RRO egentlig?

Selv om en Android-apps forretningslogikk er skrevet i Java eller Kotlin, blir brukergrensesnittet primært opprettet ved hjelp av XML-filer. En godt skrevet Android-app vil ha separate XML-ressurser som definerer sine layouter, farger, strenger og attributter. RRO-rammeverket, som navnet antyder, lar deg overlappe disse XML-ressursene med dine egne tilpassede XML-ressurser. Det er imidlertid ikke begrenset til bare XML-ressurser. Det lar deg også endre en apps drawables og skrifter.

En app som bruker RRO-rammeverket inneholder vanligvis ingen Java-kode. Den er kun sammensatt av XML-filer og, om nødvendig, skrifter og bilder. Likevel, som alle Android-apper, må den være en gyldig og signert APK.

1. Lag et nytt prosjekt

Vi trenger ikke Android Studio for å lage et prosjekt som bruker RRO-rammeverket. For nå er alt du trenger, en ny prosjektkatalog og en AndroidManifest.xml fil. Du er fri til å lage dem enten med en filutforsker eller en terminal.

mkdir MyOverlays && cd MyOverlays berører AndroidManifest.xml

Manifestfilen må inneholde pakkens navn på søknaden din og pakkenavnet til programmet du lager overlegg for. Fordi vi ønsker å endre utseendet til hurtiginnstillingsbrettet i dag, må vi bruke com.android.systemui som målpakke navn.

   

På dette tidspunktet er vi klare til å begynne å tema på hurtiginnstillingsbrettet - og andre komponenter i Android-systemgrensesnittet.

2. Lag et tema

For å overlappe en ressurs av målprogrammet, må søknaden din ha en ressurs med samme navn. Hvis du for eksempel vil endre fargene til målprogrammet, må du vanligvis legge det over colors.xml filen med din egen colors.xml fil.

For å gjøre det enkelt for deg, forventer RRO-rammeverket ikke at overlegget skal være omfattende og i stand til å håndtere alle detaljene som er til stede i den opprinnelige ressursen. Med andre ord trenger overlegget ditt bare å ha de detaljene du vil endre.

For å gjøre ting klarere, la oss si at vi vil endre bakgrunnsfargen til hurtiginnstillingsbrettet fra standardblågrå til en dyp oransje. Verdien av fargen er spesifisert i res / verdier / colors.xml fil av systemgrensesnittet. Hvis du er nysgjerrig på innholdet, kan du se på filen på det offisielle Android Git-depotet.

For å endre fargen må du nå opprette en res / verdier / colors.xml filen i prosjektet ditt.

mkdir -p res / values ​​berør res / values ​​/ colors.xml

Inne i colors.xml fil, for å endre bakgrunnsfargen på skuffen, må vi målrette mot en farge som heter system_primary_color. Legg derfor til følgende XML i filen:

  # FFBF360C  

Det er verdt å merke seg at XML-filen ovenfor ikke er forskjellig fra XML-en du vil bruke mens du lager normale apper med Android Studio.

Vårt enkle tema er klart! Hvis du vil, kan du legge til flere  koder til filen for å endre andre farger på systemgrensesnittet.

3. Generer en APK

Vi bruker nå Android Asset Packaging Tool, AAPT for kort, som er en del av Android SDK, for å konvertere vårt enkle prosjekt til en APK-fil som kan brukes av Android-plattformen.

For å generere APK, må du bare peke AAPT til manifestfilen, res katalog og målplattformen android.jar fil. Selvfølgelig må du også angi navnet du vil gi til APK-filen.

aapt-pakke -M AndroidManifest.xml -S res / \ -I ~ / Android / Sdk / plattformer / android-23 / android.jar \ -F myoverlays.apk.u

I kommandoen ovenfor kan du se at jeg har valgt å nevne APK-filen myoverlays.apk.u. Det er fordi vår APK for øyeblikket er både usignert og ujustert.

For å signere det, må du bruke jarsigner verktøy. For nå foreslår jeg at du signerer det med standard Android-debug-nøkkelbutikken. 

jarsigner -keystore ~ ​​/ .android / debug.keystore \ myoverlays.apk.u androiddebugkey

Til slutt må du justere - og dermed optimalisere - APK ved hjelp av zipalign verktøy. Som innganger forventer verktøyet navnene til de ujusterte og justerte APKene, sammen med et tall som angir justeringsgrensene. Fra 2017 kan tallet ikke være noe annet enn 4.

zipalign 4 myoverlays.apk.u myoverlays.apk

4. Installer APK

For å installere en APK som bruker RRO-rammeverket, må du bare plassere den inne i / System / leverandør / overlegg katalogen. Kataloget, som standard, tilhører et skrivebeskyttet filsystem og er bare tilgjengelig for roten brukeren. Hvis du er en tilpasset ROM-utvikler, eller har rotfestet Android-enheten, bør du ikke ha problemer med å installere APK.

I dette raske tipset vil jeg imidlertid vise deg hvordan du installerer APK på en emulator. På denne måten kan du teste overlegget uten å skade telefonen din.

Start med å skyte opp en emulator i skrivbar filsystemmodus ved hjelp av emulator kommandolinjeværktøy.

emulator -avd Nexus_5X_API_23 -writable-system

Du kan nå bruke ADB verktøy for å få root-privilegier på emulatoren, hvis du ikke allerede har dem.

adb root

Neste, sett på nytt /system filsystem som skrivbart, igjen bruk ADB.

adb-beløp

De / System / leverandør / overlegg katalog finnes ikke på emulatoren. Du må opprette det manuelt selv. Den enkleste måten å gjøre det på er å starte et skall på emulatoren.

adb shell mkdir -p / system / leverandør / overlay exit

Endelig skyver du APK til katalogen ved hjelp av ADB.

adb push myoverlays.apk / system / leverandør / overlegg

Vent noen sekunder til Android for å oppdage og installere APK, og start deretter emulatoren for at temaet skal tre i kraft.

Etter omstart, hvis du drar ned hurtiginnstillingsbrettet, bør du kunne se temaet i aksjon.

Konklusjon

I dette raske tipset lærte du hvordan du bruker Runtime Resource Overlay-rammeverket for å lage temaer for Android. Selv om temaet vi opprettet var ekstremt enkelt, kan du bruke de ferdighetene du har oppnådd i dag for å skape langt mer komplekse temaer. For eksempel kan du legge over strings.xml fil for å endre etikettene til brukergrensesnittelementene en app viser. På samme måte kan du legge over dimens.xml fil for å endre størrelsene på en applikasjonens brukergrensesnittelementer.

Dokumentasjon om RRO-rammeverket er svært lite. Likevel er det mye du kan lære om det ved å porer over Android-plattformens kildekode.

Mens du er her, sjekk ut noen av våre andre innlegg på Android-utvikling!