La API de superposición fabricada de Android 12 recupera temas sin raíz

La versión estable y completa de Android 12 está a la vuelta de la esquina y Google incluso ha lanzado el código fuente a su repositorio AOSP. Hay muchas cosas nuevas en Android 12, incluida una adición a las superposiciones de recursos llamadas Superposiciones fabricadas. Lo que se suponía que era una API para ayudar al sistema a lidiar con los cambios dinámicos utilizados en Material You y Monet pueden convertirse en algo mucho más grande, al menos hasta el lanzamiento de Android 13.

Fondo

Mishaal Rahman descubrió esta nueva API y me la llamó la atención. Había usado el comando de shell para probar diferentes valores de recursos en Android 12 sin tener que compilar manualmente APK superpuestos, y pensó que podría ser una gran idea de aplicación para dispositivos rooteados. Cuando me llamó la atención, estudié mucho el código fuente de Android 12 y noté algo que encontré bastante interesante. Probé lo que encontré, y ahora estamos aquí: resulta que la API de superposición fabricada se puede usar para recuperar temas sin root. Antes de profundizar demasiado en lo que está sucediendo aquí, explicaré qué son realmente las superposiciones fabricadas.

¿Qué son las superposiciones fabricadas?

Las superposiciones fabricadas son una nueva característica introducida en Android 12. Han sido similares a las superposiciones de recursos en tiempo de ejecución (RRO) clásicas en Android durante algunos años. Las RRO y las superposiciones fabricadas pueden reemplazar diferentes recursos para diferentes aplicaciones. Puede cambiar un valor booleano de falso a verdadero (o viceversa), establecer el tamaño de la barra de estado, etc.

Sin embargo, existen diferencias notables con las superposiciones fabricadas en comparación con las RRO. Por un lado, no es necesario generar un APK superpuesto y luego instalarlo. En su lugar, solo le dice a Android qué valores desea cambiar para qué aplicación y se encarga de guardar sus cambios como una superposición que luego puede activar.

También son un poco más limitados que los MMR. Antes de Android 11, las RRO podían reemplazar casi cualquier recurso: valores booleanos, enteros, dimensiones, atributos, diseños e incluso archivos de datos sin procesar. Android 11 realizó algunos cambios en la forma en que funcionan las RRO, lo que hace que los diseños de prioridad sean más realmente alcanzables, aunque ha hecho que las RRO sean más estables en general.

Las superposiciones fabricadas, por otro lado, solo pueden reemplazar valores que se pueden representar como números enteros. Esto incluye números enteros (duh), dimensiones, valores booleanos y colores. No puede usarlos para reemplazar activos de datos sin procesar, diseños, cadenas o tablas, al menos no fácilmente. Esta es una limitación algo arbitraria de la API: solo acepta valores enteros y categorías de recursos según lo definido por la clase TypedValue. TypedValue hace Apoyo cadenas y otros tipos de recursos, pero solo para hacer referencia a su recurso, no para mantener sus datos reales.

Te puede interesar:  Pixel Watch de Google podría tener el asistente de próxima generación y un chip Exynos

Sin embargo, estas limitaciones no son demasiado importantes para el propósito de las superposiciones fabricadas: Material You y los efectos monet. Las superposiciones fabricadas permiten que el sistema genere y aplique fácilmente superposiciones de color y tamaño sobre la marcha, sin tener que reiniciar o esperar a que se compile un APK.

Ahora, normalmente, esa sería solo otra API genial que las personas con dispositivos rooteados podrían aprovechar. A menos que exista una vulnerabilidad creada por el fabricante (como la que Synergy aprovecha en los dispositivos Samsung), las superposiciones solo pueden ser instaladas por terceros con acceso root. Sin embargo, esa es la mejor parte: Google se olvidó de llenar un vacío en Android 12.

Superposiciones hechas sin raíz

Android 8 introdujo la nueva API de Overlay Manager Service (o OMS), y la gente descubrió rápidamente que los APK de superposición se podían instalar como aplicaciones normales y luego activarse mediante ADB. Desafortunadamente, Google solucionó esto en Android 9 y, desde entonces, solo las superposiciones firmadas con la misma clave que el sistema se pueden instalar dinámicamente.

Resulta que las superposiciones fabricadas de Android 12 tienen un defecto que recuerda a la de Android 8: no necesitan acceso de root ni permisos de firma. Solo necesitan que algo se ejecute como usuario de shell (es decir, ADB) para registrarlos.

Está bastante claro que Google pretendía que las superposiciones fabricadas fueran accesibles solo para usuarios raíz y del sistema. Hay una implementación de comando ADB para crearlos, y no se ejecutará si el usuario que lo ejecuta no es root. La falla es que el control está solo en el comando, no en la API en sí, lo que significa que podemos aprovecharlo con un poco de trabajo.

ADB en el dispositivo

Android ha tenido durante mucho tiempo la funcionalidad ADB inalámbrica. Esto permite que una computadora (o cualquier cosa con acceso a la red binaria y ADB) se conecte a un dispositivo de forma inalámbrica. Está diseñado principalmente para dispositivos Android que no tienen conexiones USB accesibles para el usuario, como relojes inteligentes y televisores. Además, antes de Android 11, necesitaba una conexión ADB por cable para habilitar el modo inalámbrico.

Android 11 es lo que oficialmente trajo ADB inalámbrico a teléfonos y tabletas. Es un poco más complicado que el ADB inalámbrico clásico, con códigos de emparejamiento y autenticación, pero el usuario puede activarlo por completo en el dispositivo, siempre que el dispositivo esté conectado a WiFi. Esto significa que es posible conectarse a su dispositivo a través de ADB desde su dispositivo, y todo lo que necesita es una conexión WiFi.

Te puede interesar:  La actualización del sistema de Google Play para octubre de 2022 se está implementando

Usar API elevadas en una aplicación

Hay muchas razones por las que es posible que desee utilizar API restringidas en su aplicación. Por lo general, es porque ofrecen algunas características especiales que necesita. Siempre que la API que necesita tenga una implementación de comando de shell, es bastante fácil de usar desde una aplicación. Todo lo que necesita hacer es crear un proceso de shell como root (o ADB), ejecutar el comando correcto y analizar el resultado, si corresponde.

¿Qué sucede si la API no tiene una implementación de shell o si a la implementación de shell le falta algo que necesita? Si está en un dispositivo rooteado, puede usar algo como libRootJava. libRootJava le permite interactuar con las API del marco de trabajo de Android como si su aplicación se estuviera ejecutando como usuario root. Es más conveniente y mucho más rápido que ejecutar comandos de shell porque todo está en el mismo idioma y no tiene que preocuparse por el análisis manual de cadenas. Tiene algunas limitaciones, pero en su mayor parte funciona bien.

La API libRootJava es bastante flexible. Puede adaptarlo para que se ejecute como usuario de shell en lugar de root. Afortunadamente, no tienes que hacerlo, porque alguien lo ha hecho antes y se llama Shizuku. Shizuku es casi como una combinación de Magisk Manager y libRootJava.

La aplicación Shizuku Manager lo guía a través de la configuración de un proceso que se ejecuta como un usuario de shell al que puede acceder Shizuku. La biblioteca de API de Shizuku se puede implementar en aplicaciones para permitirles acceder a las API del sistema como si fueran el usuario de shell. Es un proceso mucho más centralizado que libRootJava, ya que Shizuku solo necesita configurarse una vez antes de que cada aplicación que implemente la biblioteca API de Shizuku pueda usarlo. Si está interesado en cómo funciona Shizuku y cómo puede integrarlo en su aplicación, aquí tengo una guía.

Shizuku y superposiciones fabricadas

A estas alturas probablemente ya pueda ver hacia dónde se dirige. Podemos usar un servicio como Shizuku para acceder a la API de superposiciones fabricadas como un usuario de shell, y podemos usar la función ADB inalámbrica de Android 11 para obtener acceso a nivel de shell, todo en el dispositivo. Dado que la restricción de usuario root no es presente solo en el comando de shell Fabricated Overlays y no en la API en sí, simplemente ejecútelo como el usuario de shell para usarlo directamente.

Te puede interesar:  Chromecast con la suite de Google TV podría ser un modelo de gama baja

Implementación: biblioteca y aplicación de muestra

¿Qué pasa con los detalles de implementación? Bueno, también te tengo cubierto para eso.

Anticipándome a esto, creé una biblioteca y una aplicación de muestra completamente funcional utilizando esta biblioteca.

La biblioteca en sí es principalmente por conveniencia. Abarca algunas de las API del sistema ocultas y le brinda algunos métodos útiles para administrar los permisos de Shizuku. También es flexible, por lo que puede proporcionar su propia instancia de la API IOverlayManager si tiene otra forma de obtenerla.

La aplicación de muestra muestra cómo implementar la biblioteca usando Shizuku. También es una aplicación completamente funcional y útil. La página principal muestra las superposiciones fabricadas guardadas actualmente que se crearon a través de ella, agrupadas por aplicación de destino. También puede habilitarlos, deshabilitarlos y eliminarlos desde allí.

Al presionar el botón "Agregar superposición" en la parte inferior, accederá a una lista de todas las aplicaciones apilables. Busque o desplácese para encontrar el que necesita y tóquelo. Luego, puede presionar el botón "Agregar" en la parte inferior de la pantalla para mostrar la lista de recursos que se pueden reemplazar en esta aplicación. Seleccione un recurso, establezca su valor y repita la operación para tantos valores como desee cambiar. Presione el botón 'Guardar', ingrese un nombre, confirme y será llevado de regreso a la pantalla principal, que ahora muestra la nueva superposición, lista para ser activada.

Aquí hay algunas capturas de pantalla de la aplicación, cortesía de Mishaal Rahman.

Por cierto, también tengo una aplicación de administrador de superposición general llamada… Overlay Manager. La aplicación precompilada en sí solo está disponible en mi Patreon, pero el código fuente está disponible de forma gratuita para cualquiera que quiera compilarlo o modificarlo.

Conclusión

La nueva API de superposiciones fabricadas en Android 12 es bastante impresionante, principalmente porque no necesita root. Puede que no sea tan sofisticado como un APK RRO completo, pero le brinda mucha más flexibilidad sin acceso de root.

Descubra la aplicación Fabricate Overlay en GitHub

Si tiene un dispositivo con Android 12 y desea probarlo, consulte el repositorio de GitHub vinculado anteriormente. La sección de lanzamientos tendrá un APK para que lo descargues y utilices. La biblioteca debería ser fácil de incluir en su propia aplicación usando JitPack.

Por supuesto, no debe esperar que esta característica persista por mucho tiempo. A Google realmente no le gustan las superposiciones de terceros, por lo que esto casi se solucionará para siempre cuando se lance Android 13. Mientras tanto, ¡disfrútalo mientras dure!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Usamos cookies para mejorar la experiencia del usuario. Selecciona aceptar para continuar navegando. Más información

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad