Det är inte många som vet om det, och Google annonserar sällan det, men Android-operativsystemet har byggt ett tematiskt ramverk inbyggt i några år nu. Det kallas Runtime Resource Overlay-ramverket, RRO för kort och det minskar dramatiskt den ansträngning som behövs för att skapa anpassade teman för din telefon.
Med RRO kan du snabbt skapa teman som kan ändra utseendet på nästan alla appar som är installerade på en Android-enhet. Eftersom Android-systemgränssnittskomponenter, inklusive navigeringsfältet, statusfältet, meddelandebackret och snabbinställningsfacket, tillhör själva en app, kan du också ändra sitt utseende. Och det bästa med det är att du inte behöver skriva någon Java-kod alls.
Vad är fångan, frågar du? Tja, ramverket kan bara användas av privilegierade appar. Mer specifikt, av appar som är installerade på en plats som endast kan nås av rotanvändaren eller av någon som skapar en anpassad ROM.
I det här snabba tipset visar jag dig hur du använder ramverket för att skapa ett enkelt tema som ändrar utseendet på snabbinställningsfacket.
För att kunna följa med behöver du följande:
Om du aldrig har använt Android SDK från kommandoraden och inte är bekant med Android-firmware skulle det vara en bra idé att läsa följande handledning:
Även om en Android-apps affärslogik är skriven i Java eller Kotlin skapas användargränssnittet främst med hjälp av XML-filer. En välskriven Android-app kommer att ha separata XML-resurser som definierar dess layouter, färger, strängar och attribut. RRO-ramverket, som namnet antyder, låter dig överlappa dessa XML-resurser med egna egna XML-resurser. Det är dock inte begränsat till bara XML-resurser. Det låter dig också ändra en apps drawables och teckensnitt.
En app som använder RRO-ramen innehåller vanligen ingen Java-kod. Den är endast sammansatt av XML-filer och, om så är nödvändigt, teckensnitt och bilder. Liksom alla Android-appar måste den vara en giltig och signerad APK.
Vi behöver inte Android Studio för att skapa ett projekt som använder RRO-ramen. För närvarande behöver du bara en ny projektkatalog och en AndroidManifest.xml fil. Du kan skapa dem antingen med en filutforskare eller en terminal.
mkdir MyOverlays && cd MyOverlays berör AndroidManifest.xml
Manifestfilen måste innehålla paketnamnet på din ansökan och paketnamnet på det program du skapar överlägg för. Eftersom vi vill ändra utseendet på snabbinställningsfacket idag måste vi använda com.android.systemui
som målpaketnamnet.
Vid denna tidpunkt är vi redo att starta teman för snabbinställningsfacket och andra komponenter i Android-systemgränssnittet.
För att överlappa en resurs för målprogrammet måste din ansökan ha en resurs med samma namn. Om du till exempel vill ändra färgerna i målprogrammet måste du vanligtvis överlappa det colors.xml filen med din egen colors.xml fil.
För att göra det enkelt för dig, förväntar RRO-ramen inte att överlaget är omfattande och kan hantera alla detaljer som finns i den ursprungliga resursen. Med andra ord behöver ditt överlag endast ha de uppgifter som du vill ändra.
För att göra saker tydligare, låt oss säga att vi vill ändra bakgrundsfärgen på snabbinställningsfacket från standardblåttgrått till en djup orange. Värdet på färgen anges i res / värden / colors.xml fil i systemgränssnittet. Om du är nyfiken på innehållet kan du titta på filen på det officiella Android Git-arkivet.
För att ändra färgen måste du nu skapa en res / värden / colors.xml filen i ditt projekt.
mkdir -p res / värden berör res / värden / colors.xml
Inuti colors.xml fil, för att ändra bakgrundsfärgen på facket måste vi rikta in en färg som heter system_primary_color
. Lägg därför till följande XML i filen:
# FFBF360C
Det är värt att notera att ovanstående XML inte skiljer sig från XML som du skulle använda medan du skapar vanliga appar med Android Studio.
Vårt enkla tema är klart! Om du vill kan du lägga till mer
taggar till filen för att ändra andra färger i systemgränssnittet.
Vi använder nu Android Asset Packaging Tool, aapt
för kort, vilket är en del av Android SDK, för att konvertera vårt enkla projekt till en APK-fil som kan användas av Android-plattformen.
För att generera APK måste du bara peka på aapt
till manifestfilen, res katalog och målplattformen android.jar fil. Självklart måste du också ange det namn du vill ge till APK-filen.
aapt-paketet -M AndroidManifest.xml -S res / \ -I ~ / Android / Sdk / plattformar / android-23 / android.jar \ -F myoverlays.apk.u
I ovanstående kommando kan du se att jag har valt att namnge APK-filen myoverlays.apk.u. Det beror på att vår APK för närvarande är både osignerad och oanpassad.
För att signera det måste du använda jarsigner
verktyg. För närvarande föreslår jag att du loggar in med standard Android debug keystore.
jarsigner -keystore ~ / .android / debug.keystore \ myoverlays.apk.u androiddebugkey
Slutligen måste du anpassa och optimera - APK med zipalign
verktyg. Som inmatningar förväntar verktyget namnen på de oanpassade och inriktade APK: erna, tillsammans med ett nummer som anger gränserna för inriktning. Från och med 2017 kan numret inte vara annat än 4
.
zipalign 4 myoverlays.apk.u myoverlays.apk
För att installera en APK som använder RRO-ramverket måste du helt enkelt placera den i / System / säljaren / overlay katalogen. Katalogen, som standard, hör till ett skrivskyddat filsystem och är endast tillgängligt för root-användaren. Om du är en anpassad ROM-utvecklare eller har rotat din Android-enhet, borde du inte ha något problem med att installera APK.
I det här snabba tipset kommer jag dock att visa dig hur du installerar APK på en emulator. På så sätt kan du testa överlägget utan att äventyra din telefon.
Börja med att skjuta upp en emulator i det skrivbara filsystemläget med hjälp av emulator
kommandoradsverktyg.
emulator -avd Nexus_5X_API_23 -writable-system
Du kan nu använda aDB
verktyg för att få root-privilegier på emulatorn, om du inte redan har dem.
adb root
Nästa, omfördela /systemet filsystem som skrivbart, återigen använda aDB
.
adb-belopp
De / System / säljaren / overlay katalog finns inte på emulatorn. Du måste skapa det manuellt själv. Det enklaste sättet att göra det är att starta ett skal på emulatorn.
adb shell mkdir -p / system / leverantör / överläggsavslut
Slutligen tryck APK på katalogen med aDB
.
adb push myoverlays.apk / system / leverantör / överlagring
Vänta några sekunder för Android att upptäcka och installera APK, och starta om emulatorn för att temat ska träda i kraft.
Efter omstart, om du drar ner snabbinställningsfacket, ska du kunna se temat i åtgärd.
I det här snabba tipset lärde du dig att använda Runtime Resource Overlay-ramen för att skapa teman för Android. Även om temat vi skapade var extremt enkelt, kan du tillämpa de färdigheter du fått idag för att skapa mycket mer komplexa teman. Du kan till exempel överlappa strings.xml fil för att ändra etiketterna på användargränssnittet en app visas. På samma sätt kan du överlappa dimens.xml fil för att ändra storleken på en App-UI-element.
Dokumentation om RRO-ramverket är väldigt knappt. Ändå finns det mycket du kan lära dig om genom att poring över Android-plattformens källkod.
Medan du är här, kolla in några av våra andra inlägg i Android-utveckling!