Чому оновлення програм іноді порушують основні теми

На субстратні теми часто негативно впливає частота оновлень сторонніх додатків, особливо коли темам доводиться адаптуватися до погано закодованих програм

Це звичайне явище: користувачі застосовують теми Substratum до своїх телефонів, а потім оновлюють Slack, WhatsApp, Instagram або будь-яку кількість інших програм із Play Store. Раптом вони навіть не можуть відкрити ці програми, доки їхні накладення тем не будуть вимкнені. Багато нових користувачів Substratum озвучили свій досвід вирішення цієї проблеми з моменту випуску Безкоренева тематика Substratum для Android Oreo.

Іноді перебудова накладень у Substratum вирішує проблему, але іноді це не працюватиме, доки розробник теми не оновить тему знову. В останньому випадку користувачі застрягли, змушені використовувати заражені програми в їхньому нетематичному стандартному стані. Зайве говорити, що це може бути розчаруванням для багатьох.

Зазвичай проблема є результатом комбінації факторів: погано закодована стороння програма, часті оновлення зазначені програми, які насправді спричиняють більше проблем, ніж усувають, а також обмеження в службі Overlay Manager Service (OMS) рамка. Я спілкувався з кількома відомими тематиками, які надали деякі цінні ідеї щодо проблеми:

Джеремі Бек, хто робить Спектр Субстрат тема, а Девід Вілсон з Панування слава.

На думку цих непохитних прихильників Substratum, одні з найгірших порушників у сфері погано закодованих програм є одними з найпопулярніших. WhatsApp, Instagram, Slack, Facebook і Telegram — це приклади, які автори Substratum навели нам, розповідаючи про цю проблему. Фактично, Девід сказав, що вони є прикладами «жахливо, огидно, мерзенно закодованих» програм, що яскраво ілюструє розчарування, з яким стикаються розробники теми Substratum, намагаючись уніфікувати роботу Android навколо спільна тема.

Наприклад, «зневажливо закодований» додаток може прив’язати колір тексту до кольору фону у своєму файлі colors.xml. Якщо у цьому прикладі тема змінює колір тла, щоб він більше не був білим, текст також буде змінено, і його може стати важчим (або навіть неможливим) для читання. Отже, автор теми повинен буде додати власні xml-файли макетів до накладень тем, щоб визначити окремі кольори для тексту та фону.

Застереження полягає в тому, що нові файли xml також повинні включати кожен окремий символ коду з однойменних файлів оригінальної програми тому жодна функціональність не втрачається. Це пов’язано з тим, що OMS читає із замінника, файлу themer, тоді як сама програма намагається зробити все, що дозволяє вихідний файл. Коли додаток буде оновлено та вноситься навіть найменша непов’язана зміна до оригінальних файлів xml, накладення не працюватимуть.

Ось як це пояснює Девід:

Що роблять ці безглузді «розробники» (я вільно використовую цей термін, коли описую цих клоунів), вони використовують предмети в layout xmls, що ускладнює нам належну тематику програми без додавання цих layout xml у наш оверлей.

Щоб навести вам приклад, давайте візьмемо WhatsApp і поглянемо на елемент у файлі /res/values/colors.xml, який #фффффффф

Вони використовують @color/white як для кольорів тексту, так і для кольорів фону в усьому додатку. Це означає, що якщо тематик хоче змінити колір «білий» на щось темний, щоб зробити свій фон темним, тоді це також зробить багато тексту темним, що дуже погано.

Щоб усунути цей недолік, автори теми додадуть макет xml у своє накладання та змінять або колір тексту, або колір фону, або обидва з щось на кшталт android: background="@color/white" до чогось на зразок android: background="@*android: color/background_dark", щоб зробити фон темним.

Тепер це чудово та робить тло темним, але макет xml має містити все, що містить оригінальний макет xml, який може варіюватися від кількох рядків до понад 100 рядків. У цих рядках макета xml може бути багато різних ресурсів, які знаходяться в оригінальному коді програми, які викликаються, наприклад ідентифікатори, розміри, рядки, стилі тощо.

Ось тут проблема... якщо тематик робить накладення відповідно до WhatsApp 2.17.323 і WhatsApp оновлює до 2.17.351 (наприклад), тоді, якщо WhatsApp у своїй безмежній мудрості вирішить змінити скажімо, назва рядка, який був у накладенні, створеному для 2.17.323, і цей рядок більше не існує у 2.17.351, тоді накладення не буде успішним будувати.

Те ж саме стосується будь-чого в накладенні, яке є в будь-якому коді, який викликає ресурс, який знаходиться в програмі, якщо цей конкретний ресурс був у програмі, для якої розроблено накладення, а потім програма оновлюється, і ресурс більше не міститься в коді програми, тоді накладення не компілюється.

Це лише один приклад гри в кішки-мишки з чергуванням оновлень програм і тем, з якими стикаються автори Substratum. Коли автори теми підтримують велику кількість програм сторонніх розробників, їм доводиться множити цю гру кілька разів з кожним оновленням теми. Це нескінченний цикл роботи з кількома підтримуваними програмами та сподівання, що розчаровані користувачі не оцінять свої теми погано між оновленнями оскільки Slack (для іншого прикладу) випустив три оновлення свого додатка за два тижні після останнього оновлення свого улюбленого Slack-підтримувача тема.

Що ви можете з цим зробити?

Особисто я зазвичай чекаю оновити до моїх улюблених тем, перш ніж оновлювати будь-які програми, які я використовую які тематичні. Тим не менш, не кожен тематик має час постійно оновлювати програми, щоб не відставати від цих оновлень програм, тому ваш пробіг може відрізнятися. Якщо ви справді терпіти не можете використовувати програму в її нетематичному стані, то, можливо, чекати кілька годин або днів для вас не так вже й важко. Але якщо це порушує угоду, то, можливо, ви захочете тематизувати лише системні програми, які навряд чи зміняться найближчим часом (наприклад, SystemUI або Android Framework).

Просто визнайте, що проблема не через сам Substratum або теми Substratum, і будь ласка, не звинувачуйте розробника теми, коли щось піде не так. Ось чому механізми оформлення тем для OEM-версій Android, як-от EMUI, Samsung Experience або LG UX, не дозволяють створювати теми більше, ніж системні програми та сам інтерфейс системи. Щоб насолодитися рівнем налаштування, який пропонує Substratum, компроміс полягає в тому, що вам, можливо, доведеться трохи почекати, щоб отримати останнє оновлення програми.