Os temas do substrato são frequentemente afetados negativamente pela frequência de atualizações de aplicativos de terceiros, especialmente quando os criadores de temas precisam se adaptar a aplicativos mal codificados
É uma ocorrência comum: os usuários aplicam temas do Substratum em seus telefones e depois atualizam o Slack, o WhatsApp, o Instagram ou qualquer outro aplicativo da Play Store. De repente, eles não conseguem nem abrir esses aplicativos até que as sobreposições de tema sejam desativadas. Muitos usuários mais recentes do Substratum expressaram suas experiências com esse problema desde o lançamento do Tema de substrato sem raiz para Android Oreo.
Às vezes, reconstruir as sobreposições no Substratum resolve o problema, mas às vezes não funciona até que o desenvolvedor do tema atualize o tema novamente. Neste último caso, os usuários terão que usar os aplicativos afetados em seus estados de estoque sem tema. Escusado será dizer que esta pode ser uma experiência frustrante para muitos.
O problema geralmente é o resultado de uma combinação de fatores: um aplicativo de terceiros mal codificado, atualizações frequentes de ditos aplicativos que realmente causam mais problemas do que corrigem e limitações no Overlay Manager Service (OMS) estrutura. Falei com alguns temáticos conhecidos que forneceram alguns insights valiosos sobre o assunto: Jeremy Beck, quem faz o Espectro Tema do substrato, e David Wilson de Dominação fama.
De acordo com esses defensores do Substratum, alguns dos piores infratores no domínio dos aplicativos mal codificados estão entre os mais populares. WhatsApp, Instagram, Slack, Facebook e Telegram são exemplos que esses temas do Substratum nos citaram ao relatar esse problema. Na verdade, David disse que eles são exemplos de aplicativos “horrivelmente, nojentos e desprezivelmente codificados”, o que ilustra de forma colorida o frustração que os desenvolvedores de temas do Substratum enfrentam ao manter seus usuários satisfeitos enquanto tentam unificar suas experiências Android em torno de um tema comum.
Por exemplo, um aplicativo “codificado de forma desprezível” pode vincular a cor do texto à cor de fundo em seu arquivo colors.xml. Se um tema alterar a cor de fundo para não ser mais branco neste exemplo, o texto também será alterado e poderá ser mais difícil (ou mesmo impossível) de ler. Conseqüentemente, o criador do tema terá que adicionar seus próprios arquivos xml de layout às sobreposições de tema para especificar cores separadas para texto e plano de fundo.
A ressalva é que os novos arquivos xml também devem incluir cada caractere de código dos arquivos do aplicativo original com o mesmo nome portanto, nenhuma funcionalidade é perdida. Isso ocorre porque o OMS lê o arquivo substituto do themer enquanto o próprio aplicativo tenta fazer tudo o que o arquivo original permitia. Quando o aplicativo é atualizado e mesmo a menor alteração não relacionada é feita aos arquivos XML originais, as sobreposições não funcionarão.
Veja como David explica:
O que esses "desenvolvedores" ridículos (uso esse termo vagamente ao descrever esses palhaços) fazem é usar itens em xmls de layout que tornam difícil definir o tema do aplicativo corretamente sem adicionar esses xmls de layout em nossa sobreposição.
Para dar um exemplo, vamos pegar o WhatsApp e ver um item em seu /res/values/colors.xml que é
#ffffffff Eles usam @color/white para cores de texto e cores de fundo em todo o aplicativo. Isso significa que se um tema quiser mudar a cor de "branco" para algo escuro para tornar seus fundos escuros, então muitos textos também ficarão escuros, o que é muito ruim.
Para contornar essa deficiência, os criadores de temas adicionarão os xmls de layout em sua sobreposição e alterarão a cor do texto ou a cor de fundo ou ambas de sendo algo como android: background="@color/white" para algo como android: background="@*android: color/background_dark" para tornar o fundo escuro.
Agora, isso é ótimo e torna o fundo escuro, mas o xml do layout precisa incluir tudo o que o xml do layout original possui, o que pode variar de algumas linhas a mais de 100 linhas. Dentro dessas linhas do layout xml podem haver muitos recursos diferentes que residem dentro do código original do aplicativo que são chamados, como ids, dimensões, strings, estilos, etc.
Agora é aqui que reside o problema... se um themer fizer uma sobreposição para se adequar ao WhatsApp 2.17.323 e o WhatsApp atualizar para 2.17.351 (por exemplo), então se o WhatsApp em sua infinita sabedoria decidir mudar o nome de, digamos, uma string que estava na sobreposição feita para 2.17.323 e essa string não existe mais em 2.17.351, então a sobreposição não será bem-sucedida construir.
O mesmo vale para qualquer coisa dentro da sobreposição que esteja em qualquer código que esteja chamando um recurso que esteja dentro do aplicativo, se esse recurso específico foi no aplicativo para o qual a sobreposição foi projetada e, em seguida, o aplicativo for atualizado e o recurso não estiver mais no código do aplicativo, a sobreposição não será compilada.
Este é apenas um exemplo do jogo de gato e rato de alternância de atualizações de aplicativos e temas que os temáticos do Substratum enfrentam. Quando os themers suportam um grande número de aplicativos de terceiros, eles precisam multiplicar esse jogo várias vezes a cada atualização do tema. É um ciclo interminável de acompanhar vários aplicativos suportados e esperar que usuários frustrados não avaliem mal seus temas entre as atualizações. porque o Slack (por outro exemplo) enviou três atualizações para seu aplicativo nas duas semanas desde a última atualização de seu suporte favorito do Slack tema.
O que você pode fazer sobre isso?
Pessoalmente, costumo esperar por um atualizar para meus temas favoritos antes de atualizar qualquer aplicativo que uso que são temáticos. Dito isso, nem todo usuário tem tempo para enviar atualizações constantemente para acompanhar essas atualizações de aplicativos, portanto, sua milhagem pode variar. Se você realmente não suporta usar um aplicativo em seu estado sem tema, talvez esperar algumas horas ou dias não seja um grande problema para você. Se isso for um obstáculo, talvez você queira criar um tema apenas para aplicativos de sistema que provavelmente não mudarão tão cedo (como SystemUI ou Android Framework).
Apenas reconheça que o problema não é por causa do próprio Substratum ou dos temas do Substratum e, por favor, não culpe o desenvolvedor do tema quando algo der errado. É por isso que os mecanismos de tema em versões OEM do Android, como EMUI, Samsung Experience ou LG UX, não permitem que você crie temas mais do que aplicativos do sistema e a própria IU do sistema. Para aproveitar o nível de personalização que o Substratum oferece, a desvantagem é que talvez você precise esperar um pouco para aproveitar a atualização mais recente do aplicativo.