Suggerimento rapido tema Android con Runtime Resource Overlay Framework

Non molti ne sono a conoscenza e Google lo fa raramente, ma il sistema operativo Android ha incorporato un framework tematico per alcuni anni. Si chiama Runtime Resource Overlay framework, RRO in breve, e riduce drasticamente lo sforzo necessario per creare temi personalizzati per il tuo telefono.

Con RRO, puoi creare rapidamente temi che possono modificare l'aspetto di quasi tutte le app installate su un dispositivo Android. Poiché i componenti dell'interfaccia utente di sistema di Android, tra cui la barra di navigazione, la barra di stato, il vassoio delle notifiche e il vassoio delle impostazioni rapide, appartengono a un'app, puoi anche modificarne l'aspetto. E la parte migliore è che non devi scrivere alcun codice Java qualunque.

Qual è il problema, chiedi? Bene, il framework può essere utilizzato solo da app privilegiate. Più in particolare, dalle app installate in una posizione a cui è possibile accedere solo dall'utente root o da qualcuno che sta creando una ROM personalizzata.

In questo suggerimento rapido, ti mostrerò come utilizzare il framework per creare un tema semplice che modifichi l'aspetto della barra delle impostazioni rapide.

Prerequisiti

Per poter seguire, avrai bisogno di quanto segue:

  • un emulatore Android con Android Marshmallow o superiore
  • l'ultima versione di Android SDK

Se non hai mai utilizzato l'SDK Android dalla riga di comando e non hai familiarità con il firmware di Android, leggere le seguenti esercitazioni sarebbe una buona idea:

Cosa fa davvero RRO?

Sebbene la logica aziendale di un'app Android sia scritta in Java o Kotlin, la sua interfaccia utente viene principalmente creata utilizzando file XML. Un'app Android ben scritta avrà risorse XML separate che definiscono layout, colori, stringhe e attributi. Il framework RRO, come suggerisce il nome, consente di sovrapporre tali risorse XML alle proprie risorse XML personalizzate. Tuttavia, non è limitato alle sole risorse XML. Permette anche di modificare i drawable e i font di un'applicazione.

Un'app che utilizza il framework RRO di solito non contiene alcun codice Java. È composto solo da file XML e, se necessario, da font e immagini. Tuttavia, come tutte le app Android, deve essere un APK valido e firmato.

1. Crea un nuovo progetto

Non avremo bisogno di Android Studio per creare un progetto che utilizza il framework RRO. Per ora, tutto ciò che serve è una nuova directory di progetto e una AndroidManifest.xml file. Sei libero di crearli con un file explorer o un terminale.

mkdir MyOverlays e& cd MyOverlays toccano AndroidManifest.xml

Il file manifest deve contenere il nome del pacchetto dell'applicazione e il nome del pacchetto dell'applicazione per cui si creano le sovrapposizioni. Perché oggi vogliamo cambiare l'aspetto della barra delle impostazioni rapide, dobbiamo usare com.android.systemui come nome del pacchetto di destinazione.

   

A questo punto, siamo pronti per iniziare a utilizzare il vassoio delle impostazioni rapide e qualsiasi altro componente dell'interfaccia utente del sistema Android.

2. Crea un tema

Per sovrapporre una risorsa dell'applicazione di destinazione, la tua applicazione deve avere una risorsa con lo stesso nome. Ad esempio, se vuoi cambiare i colori dell'applicazione di destinazione, di solito devi sovrapporne la sua colors.xml file con il tuo colors.xml file.

Per semplificare le cose, il framework RRO non si aspetta che l'overlay sia completo e in grado di gestire tutti i dettagli presenti nella risorsa originale. In altre parole, l'overlay deve avere solo i dettagli che si desidera modificare.

Per rendere le cose più chiare, diciamo che vogliamo cambiare il colore di sfondo della barra delle impostazioni rapide dal blu-grigio predefinito a un'arancia profonda. Il valore del colore è specificato nel res / valori / colors.xml file dell'app UI di sistema. Se sei curioso sul suo contenuto, puoi dare un'occhiata al file sul repository ufficiale di Git per Android.

Per cambiare il colore, ora devi creare un res / valori / colors.xml file nel tuo progetto.

mkdir -p res / values ​​tocca res / values ​​/ colors.xml

Dentro il colors.xml file, per cambiare il colore di sfondo del vassoio, dobbiamo scegliere come target un colore chiamato system_primary_color. Pertanto, aggiungi il seguente codice XML al file:

  # FFBF360C  

Vale la pena notare che l'XML di cui sopra non è diverso dall'XML che useresti durante la creazione di app normali con Android Studio.

Il nostro tema semplice è pronto! Se lo desideri, puoi aggiungerne altri  tag al file per cambiare gli altri colori dell'interfaccia utente del sistema.

3. Genera un APK

Ora utilizzeremo lo strumento di pacchettizzazione delle risorse Android, aapt in breve, che fa parte dell'SDK di Android, per convertire il nostro semplice progetto in un file APK che può essere utilizzato dalla piattaforma Android.

Per generare l'APK, devi semplicemente indicare aapt al file manifest, il res directory e la piattaforma di destinazione android.jar file. Ovviamente, devi anche specificare il nome che vuoi dare al file APK.

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

Nel comando precedente, puoi vedere che ho scelto di nominare il file APK myoverlays.apk.u. Questo perché il nostro APK è attualmente non firmato e non allineato.

Per firmarlo, è necessario utilizzare il jarsigner strumento. Per ora, ti suggerisco di firmarlo con il keystore di debug di Android predefinito. 

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

Infine, devi allineare, e quindi ottimizzare, l'APK usando il Zipalign strumento. Come input, lo strumento si aspetta i nomi degli APK non allineati e allineati, insieme a un numero che specifica i limiti di allineamento. A partire dal 2017, il numero non può essere nient'altro che 4.

zipalign 4 myoverlays.apk.u myoverlays.apk

4. Installare l'APK

Per installare un APK che utilizza il framework RRO, devi semplicemente inserirlo nel / Sistema / vendor / overlay directory. La directory, per impostazione predefinita, appartiene a un filesystem di sola lettura ed è accessibile solo all'utente root. Se sei uno sviluppatore ROM personalizzato o hai rootato il tuo dispositivo Android, non dovresti avere problemi a installare l'APK.

In questo suggerimento rapido, tuttavia, ti mostrerò come installare l'APK su un emulatore. In questo modo, puoi testare la sovrapposizione senza mettere a repentaglio il tuo telefono.

Inizia accendendo un emulatore nella modalità filesystem scrivibile usando il emulatore strumento da riga di comando.

emulatore -avd Nexus_5X_API_23 -writable-system

Ora puoi usare il adb strumento per ottenere i privilegi di root sull'emulatore, se non li hai già.

adb root

Quindi, rimontare il /sistema filesystem come scrivibile, usando ancora adb.

adb remount

Il / Sistema / vendor / overlay la directory non esiste sull'emulatore. Devi crearlo manualmente tu stesso. Il modo più semplice per farlo è avviando una shell sull'emulatore.

adb shell mkdir -p / system / vendor / overlay exit

Infine, spingere l'APK nella directory usando adb.

adb push myoverlays.apk / system / vendor / overlay

Attendi alcuni secondi che Android rilevi e installi l'APK, quindi riavvia l'emulatore affinché il tema diventi effettivo.

Dopo il riavvio, se si estrae la barra delle impostazioni rapide, si dovrebbe essere in grado di vedere il tema in azione.

Conclusione

In questo suggerimento rapido, hai imparato come utilizzare il framework Runtime Resource Overlay per creare temi per Android. Sebbene il tema che abbiamo creato fosse estremamente semplice, puoi applicare le abilità acquisite oggi per creare temi molto più complessi. Ad esempio, puoi sovrapporre il strings.xml file per cambiare le etichette degli elementi dell'interfaccia utente viene visualizzata un'app. Allo stesso modo, puoi sovrapporre il dimens.xml file per modificare le dimensioni degli elementi dell'interfaccia utente di un'app.

La documentazione relativa al framework RRO è molto scarsa. Tuttavia, ci sono molte cose che puoi apprendere esaminando il codice sorgente della piattaforma Android.

Mentre sei qui, dai uno sguardo ad alcuni dei nostri altri post sullo sviluppo di Android!