Por qué las actualizaciones de aplicaciones a veces rompen los temas del sustrato

Los temas de Substratum a menudo se ven afectados negativamente por la frecuencia de las actualizaciones de aplicaciones de terceros, especialmente cuando los temas tienen que adaptarse a aplicaciones mal codificadas.

Es algo común: los usuarios aplican temas de Substratum a sus teléfonos y luego actualizan Slack, WhatsApp, Instagram o cualquier otra aplicación de Play Store. De repente, ni siquiera pueden abrir esas aplicaciones hasta que se deshabiliten las superposiciones de temas. Muchos usuarios más nuevos de Substratum han expresado sus experiencias con este problema desde el lanzamiento de Tematización de Substratum sin raíz para Android Oreo.

A veces, reconstruir las superposiciones en Substratum soluciona el problema, pero a veces no funcionará hasta que el desarrollador del tema actualice el tema nuevamente. En el último caso, los usuarios se ven obligados a utilizar las aplicaciones afectadas en sus estados originales sin tema. No hace falta decir que esta puede ser una experiencia frustrante para muchos.

El problema suele ser el resultado de una combinación de factores: una aplicación de terceros mal codificada, actualizaciones frecuentes de dichas aplicaciones que en realidad causan más problemas de los que solucionan, y limitaciones en el Overlay Manager Service (OMS) estructura. Hablé con un par de temáticos conocidos que me brindaron algunas ideas valiosas sobre el tema: Jeremy Beck, quien hace el Espectro Tema del sustrato, y David Wilson de Dominación fama.

Según estos incondicionales de Substratum, algunos de los peores infractores en el ámbito de las aplicaciones mal codificadas se encuentran entre los más populares. WhatsApp, Instagram, Slack, Facebook y Telegram son ejemplos que nos citaron estos temáticos de Substratum al contarnos este problema. De hecho, David dijo que son ejemplos de aplicaciones "horrible, repugnante y despreciablemente codificadas", lo que ilustra de manera colorida la frustración que enfrentan los desarrolladores de temas de Substratum cuando mantienen contentos a sus usuarios mientras intentan unificar sus experiencias de Android en torno a un tema común.

Por ejemplo, una aplicación "codificada de manera despreciable" podría vincular el color del texto con el color de fondo en su archivo Colors.xml. Si un tema cambia el color de fondo para que ya no sea blanco en este ejemplo, el texto también cambiará y podría volverse más difícil (o incluso imposible) de leer. En consecuencia, el tema tendrá que agregar sus propios archivos xml de diseño a las superposiciones de su tema para especificar colores separados para el texto y el fondo.

La advertencia es que los nuevos archivos xml también deben incluir cada carácter del código de los archivos de la aplicación original del mismo nombre por lo que no se pierde ninguna funcionalidad. Esto se debe a que OMS lee del archivo sustituto, mientras que la aplicación intenta hacer todo lo que el archivo original permitía. Cuando la aplicación se actualiza y incluso se realiza el más mínimo cambio no relacionado a los archivos xml originales, las superposiciones no funcionarán.

Así lo explica David:

Lo que hacen estos ridículos "desarrolladores" (uso ese término libremente cuando describo a estos payasos) es usar elementos en xmls de diseño que nos dificultan crear un tema adecuado para la aplicación sin agregar esos xmls de diseño a nuestra superposición.

Para darle un ejemplo, tomemos WhatsApp y observemos un elemento en su /res/values/colors.xml que es #ffffffff

Usan @color/white tanto para los colores del texto como para los colores de fondo en toda su aplicación. Esto significa que si un tema quiere cambiar el color "blanco" a algo oscuro para oscurecer el fondo, también oscurecerá mucho texto, lo cual es muy malo.

Para solucionar esa deficiencia, los temáticos agregarán los xml de diseño en su superposición y cambiarán el color del texto o el color de fondo o ambos desde desde algo como android: background="@color/white" hasta algo como android: background="@*android: color/background_dark" para oscurecer el fondo.

Ahora bien, esto es genial y oscurece el fondo, pero el diseño xml debe incluir todo lo que tiene el diseño xml original, que puede variar desde unas pocas líneas hasta más de 100 líneas. Dentro de esas líneas del diseño xml puede haber muchos recursos diferentes que residen dentro del código original de la aplicación a los que se llama, como identificadores, dimensiones, cadenas, estilos, etc., etc.

Ahora aquí radica el problema... Si un tema hace una superposición para adaptarse a WhatsApp 2.17.323 y las actualizaciones de WhatsApp a 2.17.351 (por ejemplo), entonces si WhatsApp, en su infinita sabiduría, decide cambiar. el nombre de, digamos, una cadena que estaba en la superposición creada para 2.17.323 y esa cadena ya no existe en 2.17.351, entonces la superposición no se realizará correctamente construir.

Lo mismo ocurre con cualquier cosa dentro de la superposición que esté en cualquier código que llame a un recurso que esté dentro de la aplicación, si ese recurso en particular estaba en la aplicación para la que se diseñó la superposición y luego la aplicación se actualiza y el recurso ya no está en el código de la aplicación, entonces la superposición no se compilará.

Este es solo un ejemplo del juego del gato y el ratón de alternar actualizaciones de aplicaciones y temas al que se enfrentan los temáticos de Substratum. Cuando los temáticos admiten una gran cantidad de aplicaciones de terceros, tienen que multiplicar este juego varias veces con cada actualización del tema. Es un ciclo interminable de mantenerse al día con múltiples aplicaciones compatibles y esperar que los usuarios frustrados no califiquen mal sus temas entre actualizaciones. porque Slack (para poner otro ejemplo) lanzó tres actualizaciones a su aplicación en las dos semanas transcurridas desde la última actualización de su aplicación favorita compatible con Slack. tema.

¿Qué puedes hacer al respecto?

Personalmente suelo esperar una actualizar a mis temas favoritos antes de actualizar cualquier aplicación que uso que son tematizados. Dicho esto, no todos los temas tienen el tiempo para impulsar actualizaciones constantemente para mantenerse al día con las actualizaciones de estas aplicaciones, por lo que su kilometraje puede variar. Si realmente no soportas usar una aplicación en su estado sin tema, entonces tal vez esperar unas horas o días no sea un gran problema para ti. Sin embargo, si esto es un factor decisivo, entonces quizás desee crear temas únicamente para aplicaciones del sistema que probablemente no cambien en el corto plazo (como SystemUI o Android Framework).

Simplemente reconozca que el problema no se debe a Substratum en sí ni a los temas de Substratum, y no culpe al desarrollador del tema cuando algo salga mal. Esta es la razón por la que los motores de temas en las versiones OEM de Android, como EMUI, Samsung Experience o LG UX, no le permiten crear temas más que las aplicaciones del sistema y la propia interfaz de usuario del sistema. Para disfrutar del nivel de personalización que ofrece Substratum, la desventaja es que es posible que tengas que esperar un poco para disfrutar de la última actualización de la aplicación.