No muchos lo saben, y Google rara vez lo anuncia, pero el sistema operativo Android ha tenido un marco temático incorporado desde hace algunos años. Se llama el marco Runtime Resource Overlay, RRO para abreviar, y reduce drásticamente el esfuerzo necesario para crear temas personalizados para su teléfono.
Con RRO, puede crear rápidamente temas que pueden cambiar la apariencia de casi todas las aplicaciones que están instaladas en un dispositivo Android. Debido a que los componentes de la interfaz de usuario del sistema de Android, incluida la barra de navegación, la barra de estado, la bandeja de notificaciones y la bandeja de configuración rápida, pertenecen a una aplicación, también puede cambiar su apariencia. Y lo mejor de todo es que no tienes que escribir ningún código Java en absoluto..
¿Cuál es el problema, te preguntarás? Bueno, el framework solo puede ser usado por aplicaciones privilegiadas. Más específicamente, por las aplicaciones que se instalan en una ubicación a la que solo puede acceder el usuario root, o por alguien que está creando una ROM personalizada.
En este consejo rápido, te mostraré cómo usar el marco para crear un tema simple que cambie el aspecto de la bandeja de configuración rápida.
Para poder seguirlo, necesitarás lo siguiente:
Si nunca ha usado el SDK de Android desde la línea de comandos y no está familiarizado con el firmware de Android, le recomendamos que lea los siguientes tutoriales:
Aunque la lógica de negocios de una aplicación de Android está escrita en Java o Kotlin, su interfaz de usuario se crea principalmente utilizando archivos XML. Una aplicación de Android bien escrita tendrá recursos XML separados que definan sus diseños, colores, cadenas y atributos. El marco RRO, como su nombre lo indica, le permite superponer esos recursos XML con sus propios recursos XML personalizados. Sin embargo, no se limita solo a los recursos XML. También te permite cambiar las fuentes y los elementos dibujables de una aplicación..
Una aplicación que utiliza el marco RRO generalmente no contiene ningún código Java. Está compuesto solo de archivos XML y, si es necesario, de fuentes e imágenes. Sin embargo, como todas las aplicaciones de Android, debe ser un APK válido y firmado..
No necesitaremos Android Studio para crear un proyecto que use el marco RRO. Por ahora, todo lo que necesita es un nuevo directorio de proyectos y un AndroidManifest.xml expediente. Usted es libre de crearlos ya sea con un explorador de archivos o un terminal.
mkdir MyOverlays && cd MyOverlays toque AndroidManifest.xml
El archivo de manifiesto debe contener el nombre del paquete de su aplicación y el nombre del paquete de la aplicación para la que está creando las superposiciones. Como queremos cambiar el aspecto de la bandeja de configuración rápida hoy, debemos usar com.android.systemui
como el nombre del paquete de destino.
En este punto, estamos listos para comenzar con la bandeja de configuración rápida y cualquier otro componente de la interfaz de usuario del sistema Android..
Para superponer un recurso de la aplicación de destino, su aplicación debe tener un recurso con el mismo nombre. Por ejemplo, si desea cambiar los colores de la aplicación de destino, normalmente tendrá que superponer su colores.xml archivo con su propio colores.xml expediente.
Para facilitarle las cosas, el marco RRO no espera que la superposición sea completa y capaz de manejar todos los detalles presentes en el recurso original. En otras palabras, su superposición debe tener solo los detalles que desea cambiar.
Para aclarar las cosas, digamos que queremos cambiar el color de fondo de la bandeja de configuración rápida del azul-gris predeterminado al naranja intenso. El valor del color se especifica en la res / values / colors.xml Archivo de la aplicación UI del sistema. Si tiene curiosidad por su contenido, puede consultar el archivo en el repositorio oficial de Android Git..
Para cambiar el color, ahora debe crear un res / values / colors.xml archiva en tu proyecto.
mkdir -p res / values touch res / values / colors.xml
Dentro de colores.xml Para cambiar el color de fondo de la bandeja, debemos seleccionar un color denominado system_primary_color
. Por lo tanto, agregue el siguiente XML al archivo:
# FFBF360C
Vale la pena señalar que el XML anterior no es diferente del XML que usaría al crear aplicaciones normales con Android Studio.
¡Nuestro tema simple está listo! Si quieres, puedes añadir más.
Etiquetas al archivo para cambiar otros colores de la interfaz de usuario del sistema..
Ahora usaremos la herramienta de empaquetado de activos de Android, aapt
para abreviar, que es una parte del SDK de Android, para convertir nuestro proyecto simple en un archivo APK que puede ser utilizado por la plataforma Android.
Para generar el APK, simplemente debes apuntar aapt
al archivo manifiesto, el res directorio, y la plataforma de destino android.jar expediente. Por supuesto, también debe especificar el nombre que desea asignar al archivo APK.
paquete aapt -M AndroidManifest.xml -S res / \ -I ~ / Android / Sdk / platform / android-23 / android.jar \ -F myoverlays.apk.u
En el comando anterior, puedes ver que he elegido nombrar el archivo APK myoverlays.apk.u. Eso es porque nuestro APK está actualmente sin firmar y sin alinear.
Para firmarlo, debe utilizar el jarsigner
herramienta. Por ahora, le sugiero que lo firme con el almacén de claves de depuración de Android predeterminado.
jarsigner -keystore ~ / .android / debug.keystore \ myoverlays.apk.u androiddebugkey
Por último, debe alinear, y así optimizar, el APK utilizando el zipalign
herramienta. Como entradas, la herramienta espera los nombres de los APK alineados y no alineados, junto con un número que especifica los límites de alineación. A partir de 2017, el número no puede ser más que 4
.
zipalign 4 myoverlays.apk.u myoverlays.apk
Para instalar un APK que use el marco RRO, simplemente debe colocarlo dentro del / sistema / vendedor / superposición directorio. El directorio, de forma predeterminada, pertenece a un sistema de archivos de solo lectura y solo es accesible para el usuario root. Si es un desarrollador de ROM personalizado o ha rooteado su dispositivo Android, no debería tener problemas para instalar el APK.
En este consejo rápido, sin embargo, te mostraré cómo instalar el APK en un emulador. De esta manera, puede probar la superposición sin poner en peligro su teléfono..
Comience activando un emulador en el modo de sistema de archivos de escritura utilizando el emulador
herramienta de línea de comandos.
emulador -avd Nexus_5X_API_23 -sistema de escritura
Ahora puedes usar el adb
Herramienta para obtener privilegios de root en el emulador, si aún no los tiene.
raíz adb
A continuación, vuelva a montar el /sistema sistema de archivos como grabable, de nuevo utilizando adb
.
remontar
los / sistema / vendedor / superposición El directorio no existe en el emulador. Debe crearlo manualmente usted mismo. La forma más fácil de hacerlo es iniciar un shell en el emulador.
adb shell mkdir -p / system / vendor / overlay exit
Finalmente, empuje el APK al directorio usando adb
.
adb push myoverlays.apk / system / vendor / overlay
Espere unos segundos hasta que Android detecte e instale el APK, y luego reinicie el emulador para que el tema tenga efecto..
Después del reinicio, si abres la bandeja de configuración rápida, deberías poder ver el tema en acción.
En esta sugerencia rápida, aprendió a usar el marco de superposición de recursos de tiempo de ejecución para crear temas para Android. Aunque el tema que creamos fue extremadamente simple, puede aplicar las habilidades que adquirió hoy para crear temas mucho más complejos. Por ejemplo, puede superponer la strings.xml Archivo para cambiar las etiquetas de los elementos de la interfaz de usuario que muestra una aplicación. Del mismo modo, puede superponer el dimens.xml Archivo para cambiar los tamaños de los elementos de la interfaz de usuario de una aplicación.
La documentación sobre el marco RRO es muy escasa. No obstante, hay mucho que puede aprender al leer detenidamente el código fuente de la plataforma Android.
Mientras estés aquí, echa un vistazo a algunas de nuestras otras publicaciones sobre el desarrollo de Android!