LINUX.ORG.RU

Сообщения dsn76

 

Android-приложение банка Новиком — белый экран

 , ,

На старый телефон, с Android 9, переставив в новый телефон SIM-карты, удалив все контакты и данные, установил несколько банковских приложений.

Приложение указанного банка устанавливал, скачивая apk-файл с их сайта. Примерно в начале сентября 2026 года старая версия окончательно перестала работать и пришлось обновиться до последней, которая при старте (неважно: наличие интернета, настроек, сразу после установки) вываливалась в белый экран и так могла висеть бесконечно, ни на что не реагируя.

По телефону в банке посоветовали: перегрузить телефон, чистить, переустанавливать, «танцевать с бубном», купить новый телефон, дарить - отказались, как и принимать претензию по телефону.

На письменный запрос, в ответе посоветовали: «Яндекс Браузер», перегрузить, менять точки доступа, отключить VPN (там его нет), обновить HMS Core (???), обновить «WebView».

На RuStore нашёл несколько отзывов с похожим симптомом.

Google Gemini тоже посоветовал обновить WebView, но после уточняющего вопроса про Android 9 изменил свой совет:

Да, вы абсолютно правы в своих сомнениях. Официально Google прекратила выпускать новые версии Google Chrome и Android System WebView для Android 9. Для этой операционной системы последние совместимые версии компонентов заморожены, из-за чего современные российские банковские приложения часто выдают белый экран. Однако решить эту проблему на Android 9 всё же можно. Дело в том, что в архитектуре Android 7, 8 и 9 компонент WebView жестко привязан к Google Chrome. Если ломается или устаревает Chrome, ломается отображение веб-интерфейсов внутри других программ.

В итоге понял, что обновлять надо Google Chrome, но мне хотелось понять, в чём же дело, тогда «скормил» apk-файл приложения банка, ИИ-агенту под управлением MiMo-V2.6-Flash, он нагенерил отчёт с несколькими гипотезами, и предложил для их проверки подключить телефон к компьютеру в режиме отладки, что я и сделал, и через полчаса приложение заработало, агент сам скачал и обновил до нужной версии Google Chrome, сначала хотел WebView, но повторил выводы Gemini.

Помимо прочего, в отчёте написал и про ошибки разработчиков:

Рекомендации (подтверждены экспериментом)

Для пользователей / на стороне устройства:

  1. Обновить WebView/Chrome до версии ≥ Chrome 93 (нужен как минимум Chrome 93 для Object.hasOwn, Chrome 85 для replaceAll). На этом устройстве системный WebView зафиксирован на Chromium 79 — штатно не обновляется (новейшие сборки требуют Android 10+, устройство на Android 9). → Требуется ручная установка совместимой сборки (например, Chrome 119 — проверено рабочей) либо производителем ОС обновление WebView.

Для разработчиков приложения (правильное решение):

  1. Не использовать API новее поддерживаемого минимума WebView, либо полифиллить: Object.hasOwn → Object.prototype.hasOwnProperty.call(...); String.replaceAll → .split/join или .replace(/…/g, …).
  2. Добавить .catch() к Promise.all бутстрапа и показывать экран ошибки вместо белого экрана (сейчас ошибка молча проглатывается — главный усилитель бага).
  3. Задать разумный LoadUrlTimeoutValue (сейчас 1 000 000 мс ≈ 16,7 мин) и errorUrl в config.xml, чтобы показывать ошибку, а не белый экран.
  4. Устранить противоречие usesCleartextTraffic="false" ↔ network_security_config: cleartext=true.

Итого: банк, размещая приложение для скачивания, нигде не указывает, на какое окружение оно рассчитано, с какими версиями может работать. Разработчики, вместо минимальной обработки ошибок, предлагают клиентам писать им на почту (см. RuStore).

Анекдот:
- У вас на работе искусственный интеллект используют?
- У нас даже естественный не используют!
dsn76
()

Simplerpc (libsrpc): Модель владения памятью

 , , ,

В предыдущей статье Simplerpc: Простой RPC на Си для Linux-приложений было краткое знакомство с framework-ом, в этой подробнее описана используемая в нём модель владения разделяемой памятью.

При использовании несколькими приложениями аллокатора из общего пула разделяемой памяти возникает несколько задач, которые можно по-разному решать. Пул отображается во все процессы по одному и тому же виртуальному адресу, поэтому указатель, полученный в одном процессе, остаётся валидным в другом, и данные между процессами можно передавать вообще без копирования. Обратная сторона такого удобства в том, что любой из процессов может в любой момент «умереть» — по exit(), SIGKILL или segfault — и оставить после себя либо недоделанную операцию с аллокатором, либо выделенные блоки, которые больше никому не нужны.

( читать дальше... )

dsn76
()

Simplerpc: Простой RPC на Си для Linux-приложений

 , ,

Есть классическая проблема: изолированные процессы — хорошо для надёжности, но хочется иногда позвать функцию из соседа, как будто она лежала в той же библиотеке. Стандартные IPC — это всегда протокол: описал интерфейс, сгенерировал стабы, поднял сервер, прописал адреса. simplerpc предлагает путь короче: ты пишешь обычную функцию на Си, линкуешь библиотеку — и она автоматически становится RPC-методом, доступным другим процессам на той же машине.

( читать дальше... )

dsn76
()