Android, como proyecto AOSP, ha visto cómo los propios fabricantes han colaborado en la expansión del código base. Hoy toca el turno de hablar de Sony, quien recientemente ha contribuido al código base de Android con su nuevo framework llamado Runtime Resource Overlay (RRO).

Este framework añade la funcionalidad de reemplazar los recursos de la aplicación mientras ésta se está ejecutando. De hecho, se utiliza por ejemplo para la customización de los Temas Xperia.

Pero, ¿cómo funciona este framework? Mårten Kongstad, desarrollador líder del framework, nos lo ha explicado en detalle.

Básicamente, la idea es que dispongamos de la opción de modificar la apariencia de la aplicación en tiempo de ejecución, sin necesidad de cambiar o recompilar el código fuente. De hecho, resulta de gran utilidad para satisfacer los requisitos de algunos operadores o para los propios temas Xperia. Pero la idea no termina ahí, pues ROM cocinadas podrán también hacer uso del mismo para su beneficio.

Sin embargo, las limitaciones, por temas de seguridad, nos llevan a que los desarrolladores de aplicaciones no tengan acceso al framework. Para ponernos en situación, deberíamos tener claro qué son los recursos de una aplicación. En este artículo no vamos a entrar en detalle en este concepto, pues es algo de lo que ya hemos hablado, como por ejemplo en la sección Aprende Android en 20 conceptos.

Cuando nosotros compilamos nuestra aplicación, se generan ficheros con los recursos en nuestro APK, así como el fichero R.java, el cual incluye el mapeo de los nombres simbólicos de los recursos y sus identificadores. A partir de aquí, la aplicación gestionará la elección del recurso concreto, en base a sus restricciones (idioma, pantalla…).

Para ver cómo el framework funciona, Sony nos proporciona incluso alguna aplicación de ejemplo. Este ejemplo permitirá cambiar automáticamente la aplicación dependiendo de la configuración del sistema actual.

RRO permite que la interfaz no sea consciente de que hay cambios en la aplicación debido a su cambio de configuración. Por eso, no es necesario el cambio en el código fuente. Para ello se utilizan los paquetes de superposición. Estos paquetes consisten en ficheros APK con su AndroidManifest.xml, que pueden ser instalados y son construidos usando aapt. Sin embargo, no contienen código: tan sólo recursos.

Por tanto, el sistema, al cargar una aplicación, carga también todos los paquetes de superposición asociados para, durante la búsqueda, encontrar el mejor recurso que encaje en cada caso. Los paquetes de superposición son inspeccionados incluso antes que los originales, pero finalmente se escoge el que mejor encaja y cumple los requisitos.

Además, también se pueden gestionar múltiples superposiciones, quedando indicado el orden en el que hay que comprobar los recursos:

Todo esto resulta de gran utilidad para personalizar el móvil, pero puede llevar a problemas de seguridad, pues cada recurso puede ser modificado. Es por ello que, por ejemplo, el framework no estará accesible a los desarrolladores de aplicaciones, tal como hemos comentado anteriormente.

A pesar de ser posible modificar todo tipo de recursos, actualmente no es posible superponer un paquete AndroidManifest.xml ni referenciar recursos en el paquete principal desde un recurso en un paquete de superposición. Pero por ahora, Sony usa RRO para la personalización de sus temas Xperia, así como para las traducciones de idiomas, entre otros.

Desde luego, Sony es uno de los fabricantes que más interés ponen en AOSP y poder ayudar a la evolución del mismo. Pero esto nos lleva a plantearnos una cuestión: ¿Por qué es tan importante para Sony contribuir con el proyecto AOSP?

Fuente | Sony Developer