Android System Webview — что это за приложение и почему оно не включается

«Ремонт» Android System WebView

Александр Носков

О пресловутом приложении Android System WebView, проблемах и попытках их решения.

Каждый пользователь Android-смартфона видит уведомление об обновлении приложения Android System WebView так же часто, как обновление безопасности Android. И тому есть причины, но прежде давайте разберемся, что это за штука такая и что она делает.

WebView

Каким бы браузером мы ни пользовались, визуально его можно разделить на показываемый контент и пользовательский интерфейс. Каким образом показывать контент при переходе по ссылке, его разметка, допустимые для перехода ссылки и так далее — это забота движка браузера. Интерфейс же представляет из себя элементы управления.

Неважно, какой это браузер, Safari, Internet Explorer, Chrome, Firefox или Edge, производителю для изменения элементов управления необходимо обновить локальное приложение. Для изменения отображения (разметки) контента достаточно обновить только компонент WebView. Программисты называют этот компонент встраиваемым браузером, который нативное приложение может использовать для отображения web-контента, но это слишком скучно и непонятно звучит. Часть движка браузера – это звучит гораздо понятнее и логичнее ввиду отсутствия популярных браузеров, которые не используют WebView.

Android System WebView

В отличие от классического десктопного понимания, в операционной системе Android компонент WebView оформлен в виде отдельного приложения и кроме стандартной функции работы с браузером отвечает за показ рекламы во всех приложениях, включая сторонние. Да-да, это та самая «бяка», которая прерывает игру неуместными рекламными вставками, отвлекает от прочтения новостей и с каждым обновлением при web-серфинге выводит вверх все больше ссылок от самой компании Google.

Да, некоторые сторонние приложения используют собственный рекламный движок. Чаще всего к ним относятся проекты с миллионами пользователей онлайн каждый день, а также множество приложений из Поднебесной, но большинство разработчиков не готовы вкладываться в отдельный рекламный сервер и пользуются стоковым от Google. В последнем случае пользователь видит целевую рекламу, которая перекликается с его запросами в браузере и этим нагнетает грусть, чувство, которое можно описать фразой «замуровали, демоны».

Проблемы Android System WebView

Как и с любым системным приложением Android, основные проблемы происходят после очередного обновления. Это выглядит как полный отказ или неправильный старт Android System WebView, а конкретнее – браузер либо сразу «вылетает», либо начинает дергаться, как перебравший текилы дедушка на вечеринке би-боев.

Решение

Из множества решений, которые могут встретиться на просторах интернета, реально работают только четыре. Стандартное, такое же, как для любых других приложений: зайти в настройки смартфона, удалить все обновления Android System WebView. Сразу после этого перезагрузить смартфон и установить обновления заново.

Второе посложнее и потребует навыков работы с ADB, попросите друга, если не справитесь сами. В любом случае все, что вы делаете, вы делаете на свой страх и риск. Вот краткий порядок действий:

  1. Удалите обновления Android System WebView
  2. Загрузите свою (по умолчанию) версию приложения Android System WebView по этой ссылке и закиньте его в папку ADB. Файл должен называться android-system-webview.apk.
  3. В командной строке наберите:
    adb connect IP-OF-device
    adb remount
    adb push android-system-webview.apk /system
    adb shell pm install -r -d /system/android-system-webview.apk

Третий способ требует Root-доступа и по этой причине подойдет не каждому. Рассказывать тут нечего, просто удалите системное приложение Android System WebView. Скачайте по той же ссылке последнюю версию приложения и закиньте ее в системный раздел.

Четвертый способ знают все и он не требует технических навыков. Это сброс смартфона до заводских настроек, со всеми вытекающими последствиями. Применять его следует только если не помогли первые три.

Почему столько внимания?

Мысль написать о проблеме Android System WebView возникла после того, как на глаза стал попадаться один и тот же текст, перепечатываемый из издания в здание. И если к стандартному способу решения проблемы вопросов не возникло, то со вторым просто беда – он просто был не дописан до конца в части отладки по ADB. Все лицемерие раскрывается, когда смотришь на источники – это многочисленные сайты, которые предлагают ремонт Android-смартфонов. Заблудившаяся в тумане бесполезной информации несчастная пользовательская душа в конце концов отнесет свои кровные деньги нечистым на руку дельцам. Разве может нормальный человек стерпеть такое?

Заключение

Напоследок необходимо сказать что-нибудь про главного виновника всех этих сбоев системных приложений. И их несколько, а главным, мне кажется, является компания Google. Каждый год при анонсе новой версии Android компания декларирует минимальные системные требования для устройств. И, по логике вещей, старые смартфоны, умещающиеся в эти рамки, должны продолжать исправно работать долгие годы до полного своего разрушения. К сожалению, этого не происходит, компания не хочет делать широкий жест и удалять свои системные приложения после сроков гарантированного обслуживания конкретной версии ОС (хотя и может это делать технически), количество рекламы и ее «тяжесть» также растут год от года, она становится все «актуальнее». Увы, на руках у граждан все еще очень много смартфонов с 0,5 — 1 ГБ ОЗУ, с накопителем, разделенным на системный и пользовательский разделы. И эти смартфоны получают точно такие же обновления для установленных приложений, как и их флагманские собратья. Похоже, это основные причины сбоев обновления системных приложений – несоответствие жадности главного рекламодателя, выпустившего с начала года уже 21 обновление Android System WebView, и возможностей технического оборудования простых пользователей.

Читайте также:
Как скачать apk из Google Play Маркет

Выскажите свое мнение, стоит ли овчинка выделки? Уместны ли приложения Google в Android-смартфонах? И что вы думаете о бесполезных руководствах по «ремонту», которых в Рунете развелось как грязи?

Включение компонента WebView в Android

Что такое Android System WebView

Рассматриваемый компонент представляет собой оболочку для предпросмотра ссылок и работы с веб-приложениями, которая обычно активна по умолчанию. Все особенности этого софта уже рассмотрел один из наших авторов, а мы далее сосредоточимся на вариантах его запуска, если по каким-то причинам он отключён.

Способ 1: Включение в настройках (Android 5.0-7.0 и Android 10+)

В «зелёном роботе» версий с пятой по седьмую, а также в новейших релизах, соответствующих номерам 10+, рассматриваемое ПО присутствует как выделенный компонент, который пользователи могут включать или выключать самостоятельно.

  1. Откройте «Настройки» и воспользуйтесь пунктами «Приложения и уведомления»«Показать все приложения».

Далее нажмите на три точки вверху справа и тапните «Показать системные процессы».

Прокрутите перечень до позиции «Android System WebView» и тапните по ней.

Готово – теперь компонент будет активен.

Способ 2: Отключение Chrome (Android 7.1-9.0)

В седьмой, восьмой и девятой версиях Андроида функции Вебвью на себя взял Гугл Хром – веб-приложения в этих вариантах ОС отображаются с помощью его движка. Активировать первый можно отключением последнего, в 9.0 это делается следующим образом:

    Откройте «Настройки», где выберите пункты «Приложения и уведомления»«Показать все приложения».

Теперь ПО, которое раньше пользовалось движком Хром, будет автоматически переключено на активированный таким образом WebView.

Что делать, если Android System WebView не включается

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

  1. Первым делом перезапустите смартфон или планшет – возможно, вы столкнулись с банальным багом.
  2. Попробуйте обновить софт: для этого вызовите Google Play Маркет, нажмите на три полоски вверху слева и выберите «Мои приложения и игры».

Проверьте, нет ли пункта Вебвью на вкладке «Обновления». Если таковой отсутствует, перейдите к разделу «Установленные», найдите там соответствующую запись, и нажмите «Обновить».

Если обновление недоступно или не принесло ожидаемого эффекта, проведите очистку кэша программы: выполните шаги 1-3 первого способа, но затем тапните по пункту «Хранилище и кеш», после чего воспользуйтесь кнопкой «Очистить кеш».

Последним вариантом решения проблемы будет сброс устройства к заводским настройкам: возможно, составляющие WebView оказались повреждены. Разумеется, при этом сотрутся все пользовательские данные, поэтому озаботьтесь резервным копированием самых важных файлов.

Помимо этой статьи, на сайте еще 12503 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Android System Webview — что это за приложение и почему оно не включается

Владельцы Android телефонов и планшетов иногда обращают внимание не приложение Android System Webview com.google.android.webview в списке приложений и задаются вопросами: что это за программа и, иногда, почему она не включается и что нужно сделать, чтобы её включить.

В этой короткой статье — подробно о том, что представляет собой указанное приложение, а также о том, почему оно может быть в состоянии «Отключено» на вашем Android устройстве.

Что такое Android System Webview (com.google.android.webview)

Android System Webview — это системное приложение, позволяющее открывать ссылки (сайты) и другой веб-контент внутри приложений.

К примеру, я разработал Android-приложение для сайта remontka.pro и мне требуется возможность открытия какой-то страницы этого сайта внутри своего приложения без перехода в браузер по умолчанию, для этой цели можно использовать Android System Webview.

Почти всегда это приложение предустановлено на устройствах, однако, если по какой-то причине его нет (например, вы удалили его с помощью root-доступа), вы можете скачать его из Play Маркет: https://play.google.com/store/apps/details?id=com.google.android.webview

Почему это приложение не включается

Второй часто задаваемый вопрос об Android System Webview — почему оно отключено и не включается (как его включить).

Ответ простой: начиная с Android 7 Nougat оно перестало использоваться на некоторых устройствах и в этом случае по умолчанию отключено. Теперь те же самые задачи выполняются через механизмы Google Chrome или встроенные средства самих приложений, т.е. необходимости во включении нет.

Если же у вас есть острая необходимость включить именно System Webview в Android 7 и 8, для этого существуют следующие два пути.

Первый — более простой:

  1. В приложениях отключите Google Chrome.
  2. Установите/обновите Android System Webview из Play Маркет.
  3. Откройте что-то, что использует Android System Webview, например, зайдите в настройки — Об устройстве — Юридическая информация — Правовая информация Google, затем откройте одну из ссылок.
  4. После этого вернитесь к приложению, и вы сможете увидеть, что оно включено.

Учтите, что после включения Google Chrome оно снова отключится — они не работают вместе.

Второй — несколько сложнее и не всегда работает (иногда возможность переключения отсутсвует).

  1. Включите режим разработчика на вашем Android-устройстве.
  2. Зайдите в раздел «Для разработчиков» и нажмите по пункту «Сервис WebView».
  3. Возможно, вы увидите там возможность выбрать между Chrome Stable и Android System WebView (или Google WebView, что одно и то же).

При изменении сервиса WebView с Chrome на Android (Google) вы включите рассматриваемое в статье приложение.

А вдруг и это будет интересно:

  • Windows 11
  • Windows 10
  • Android
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Установка с флешки
  • Настройка роутера
  • Всё про Windows
  • В контакте
  • Одноклассники

08.04.2018 в 09:07

Здравствуйте! На андроид 5,1 случайно удалил это приложение (root-права), скачиваю с маркета — не включается ни одним из вышеуказанных способов. Как принудительно вернуть его в систему? или может перенести apk в другой раздел?Спасибо.

09.04.2018 в 08:58

Здравствуйте, странно, что не ставится/не включается. А какие-то проблемы при работе от этого присутствуют?
Тут бы самому попробовать, но не на чем (у меня Android-ов ниже 7 для экспериментов даже и не осталось).

01.11.2018 в 23:37

Ху, спасибо большое!! Помогли, я и не думал, что из за удаленного хром может телефон не заходить на почту mail.ru

16.12.2018 в 18:00

Спасибо огромное, вы меня просто спасли, я перелопатила много материала на данную тему, и только вы дали толковый ответ. Прошлый раз мне снесли настройки, слетело все, игра, которую пришлось начинать с нуля, она не переносится на другие устройства. Так что спасибо большое. А ведь все оказалось очень просто и легко это сделать. Вы молодцы..

16.03.2019 в 15:01

Добрый друзья! Почему не установить Android System WebView, уже прошло около несколько месяцев?

17.03.2019 в 10:09

Не вполне понял ваш вопрос… О каких нескольких месяцах речь? Свои советы по установке я изложил в статье, для тех случаев и устройств, где это возможно.

18.03.2019 в 00:29

Спасибо. В маркете пишут что приложение умеет готовить и конструировать армию роботов и никто не потрудиться грамотно всё изложить как вы. Я только не понял что лучше для телефона — удалить хром и пусть обновляется это или удалить это и оставить хром или и это и хром удалить и запретить обновляться?

18.03.2019 в 09:25

Оставить как есть. Если только вы свои приложения не пишете и вам требуется проверить работу именно Webview.

22.03.2019 в 11:48

Добрый день! В течение дня приходится пользоваться разными приложениями (mail.ru, гугл, ютуб и пр.) телефон сначала исправно работает. На следующий день невозможно войти в приложения — пишет ошибка WebView. Перезагрузка телефона все исправляет до следующего дня. При обновлении WebView не может установиться. Что можно сделать? Спасибо!

22.03.2019 в 12:18

Здравствуйте.
Боюсь, тут не могу ответить, т.к. не понимаю причин описанной проблемы. Можно в теории поставить последний apk WebView с сайтов наподобие apkmirror, но не уверен, что вообще в этом дело.

31.03.2019 в 23:18

Может быть кому-нибудь это поможет: некоторые приложения, дополнительно установленные на Android TV (7.1.2), не запускались из-за ошибки webview. Переустановка с маркета не помогла, но внезапно помогло отключение режима «Многопроцессорный WebView» в меню Для разработчиков.

01.04.2019 в 11:06

Спасибо, что поделились, не знал о нюансе.

24.05.2019 в 20:12

У меня перестало работать, когда включил экономию экрана, выключил и всё заработало

08.06.2019 в 13:06

Добрый день! не обновляется данное приложение, как и хром ( идет бесконечная «установка» а далее, мол, ошибка: а какая не указывают), уже даже снес два раза все к заводским настройкам. ПОдскажите, что делать

02.02.2021 в 00:40

Было такое. Перепробовал несколько разных советов (чистка кэша всего и вся, и подобные советы), но в итоге помогло другое: в Настройках отключил режим разработчика и всё обновилось (СяоМи ми а2 лайт, андроид 10)

23.03.2021 в 20:34

А где именно в настройках находится режим разработчика?

23.03.2021 в 20:43

Вот здесь описано как включить его: https://remontka.pro/developer-mode-enable-windows-10/ плюс в комментах дополнения есть по некоторым моделям.

29.07.2019 в 04:09

Привет всем! Знающим и любознательным! Очень интересная тема про режим разработчика, хочу узнать подробнее о правильных настройках и дополнительных полезных возможностях этого режима. Ведь бывает так что не возможно удалить какой либо вредонос а сбрасывать телефон тоже не хочется когда всё настроено..да и скачивать с play market вспомогательные приложения тоже порой не безопасно,да и требований к разрешениям тоже слишком много… получается один вредонос удалил,а другой установил.. замкнутый круг. Надоело. Проясните пожалуйста или ссылочки подскажите. Заранее благодарю!

02.04.2020 в 05:08

На 5 ом базе уже отсутствует обновление и по этому вы не можете установить!

16.10.2020 в 08:49

Redmi 8 и Android 10Q. Приложение установлено по умолчанию, работает и удалить его штатными средствами невозможно. Кажется, информация в статье устарела. Цитирую:
«…начиная с Android 7 Nougat оно перестало использоваться и по умолчанию отключено.»

Как включить Android System WebView

Android System WebView — это системный компонент, отключение которого приводит к сбоям при попытке воспроизведения веб-контента в различных приложениях. Если вы испытываете подобные проблемы, познакомьтесь с инструкциями ниже, чтобы узнать, как его включить заново.

Если на вашем смартфоне или планшете отключен Android System WebView, вы столкнетесь с тем, что в большинстве приложений перестанут открываться веб-страницы при переходе по ссылке. Чтобы устранить такую проблему, нужно знать, как его запустить снова.

Что такое WebView на Андроид

Android System WebView – это системный компонент, с помощью которого упрощается просмотр веб-контента в приложениях на телефоне. К примеру, вы желаете перейти по ссылке из WhapsApp и просмотреть видео, которое вам прислал близкий человек. Если WebView правильно работает, то запись откроется в специальном мини-браузере внутри мессенджера, а не в отдельном веб-обозревателе, например, в Opera. Благодаря этому снижается время на загрузку и просмотр контента, а также сокращается энергопотребление, потому что стороннее ПО для серфинга в Интернете значительно сильнее разряжает аккумулятор.

Корректно Android WebView работает только на Андроид 5.0 и новее. На более ранних версиях приложение тоже установлено, но не адаптировано, поэтому часто возникают ошибки при его использовании. Кроме того, на старых ОС WebView не обновлялся, что влияло на производительность смартфона (планшета), т.к. приводило к расходу большого количества ОЗУ.

Начиная с Android 7.0, WebView не выполняет свои задачи: вместо него для открытия интернет-страниц используется Chrome. Однако, если отключить веб-обозреватель от Google, системный компонент снова начнет работать в полной мере. Позднее, в Android 10 и новее, произошло разделение функционала, поэтому WebView снова начал работать в обычном режиме.

Если у вас отключен этот системный компонент, вы обнаружите проблемы с открытием веб-страниц. Для устранения проблем необходимо снова его запустить. Сделать это можно с помощью инструкций ниже.

Включение WebView на Android от 5.0 до 7.0

На смартфонах и планшетах с Андроид 5.0 и новее (до 7.1), а также в версиях, начиная с 10 включение приложения выполняется в настройках устройства. Инструкция:

Шаг 1. Откройте «Настройки».

Шаг 2. Выберите вкладку «Приложения и уведомления».

Шаг 3. Нажмите «Показать все приложения».

Шаг 4. Справа в углу в меню кнопки с тремя точками выберите «Показать системные приложения».

Шаг 5. Отыщите и нажмите на «Android System WebView».

Шаг 6. На открывшейся странице выберите «Включить».

Приложение запустится. Неполадки, беспокоившие пользователя, будут устранены, но дополнительно можно перезапустить смартфон.

Инструкция приведена на примере устройства с Android 10. На более ранних версиях операционной системы действия будут такими же, но названия разделов могут незначительно отличаться.

Отключение Chrome и включение WebView на Android 7.1 – 9

Если у вас смартфон на базе Android 7.1 или новее, вплоть до версии 9, включить WebView вы сможете, отключив Google Chrome. Для этого выполните следующие действия:

Шаг 1. Откройте «Настройки».

Шаг 2. Выберите «Приложения и уведомления».

Шаг 3. Нажмите «Просмотреть все приложения».

Шаг 4. Отыщите «Chrome» и нажатием перейдите на страницу управления браузером.

Шаг 5. Коснитесь кнопки «Отключить».

Шаг 6. Остановите работу браузера подтверждением действия.

Теперь работа браузера остановлена и весь софт, пользовавшийся его возможностями, автоматически будет переведен на работу с WebView. Если этого не произошло, включите WebView вручную с помощью инструкции выше. До отключения Chrome вы не сможете этого сделать, потому что кнопка «Включить» будет неактивна.

Существует и еще один способ, позволяющий включить WebView на Андроид 7.1-9. Он более сложный и срабатывает не всегда, однако попробовать его стоит.

Шаг 1. Перейдите в «Настройки» смартфона.

Шаг 2. Выберите вкладку «Система».

Шаг 3. Откройте раздел «О телефоне».

Шаг 4. Найдите «Номер сборки» и нажмите на него 7 раз подряд.

Шаг 5. Введите графический ключ или пароль. Появится уведомление: «Вы стали разработчиком!».

Шаг 6. Вернитесь в предыдущее меню. В нем появится новая вкладка – «Для разработчиков». Перейдите в нее.

Шаг 7. Найдите раздел «Реализация WebView».

Шаг 8. Если доступна возможность выбора, измените «Chrome» на «Android System WebView».

Шаг 9. Выйдите из раздела «Для разработчиков». Лучше его предварительно выключить, сдвинув в верхней части экрана бегунок в положение «Выкл». Если он будет открыт, вы можете случайно зайти в него и внести какие-либо изменения в работу системы, которые приведут к ошибкам и сбоям в работе устройства. После этого действия вкладка снова исчезнет из меню. При необходимости включить ее можно снова с помощью шагов 4-5.

Далее проверьте, как работает WebView, открыв ссылку в каком-нибудь приложении.

Как быть, если не удается включить WebView

Если включить Android с помощью выше представленных инструкций не удалось, попробуйте выполнить перезагрузку устройства. Возможно, произошел сбой и перезапуск позволит решить проблему.

Если вы пользуетесь Android 4.3-5.0, где компонент был установлен, но не адаптирован, и это приводило к ошибкам в его работе, или же если перезагрузка вам не помогла, выполните действия ниже.

Сначала необходимо сделать очистку кэша. Для этого:

Шаг 1. Откройте «Настройки», затем «Приложения и уведомления».

Шаг 2. Выберите «Показать все приложения».

Шаг 3. В меню кнопки с тремя точками в верхнем углу справа выберите «Показать системные приложения».

Шаг 4. Найдите «Android System WebView» и нажмите на него.

Шаг 5. Выберите «Хранилище и кэш».

Шаг 6. Нажмите «Очистить кэш» и «Очистить хранилище».

Теперь попробуйте снова включить приложение. Если результата нет, проверьте наличие обновлений. Для этого:

Шаг 1. Откройте «Play Market».

Шаг 2. В строке поиска в верхней части экрана нажмите на кнопку с первой буквой вашего имени и в открывшемся окне выберите «Управление приложениями и устройством».

Шаг 3. Перейдите во вкладку «Доступные обновления».

Шаг 4. Если в открывшемся окне есть «Android System WebView», используйте кнопку «Обновить». Если процесс не начинается, нажмите на само приложение.

Шаг 5. Кликните «Обновить» на странице системного компонента.

Шаг 6. Дождитесь окончания процесса.

Если обновления отсутствуют, то:

Шаг 1. В настройках найдите «Android System WebView» и нажмите на него.

Шаг 2. На странице приложения кликните по кнопке с тремя точками вверху справа и выберите «Удалить обновления».

Шаг 3. Перезагрузите смартфон.

После запуска обновление системного компонента должно произойти автоматически, если же этого не случилось, то выполните инструкцию выше.

Если перечисленные выше шаги не помогли запустить Android System WebView, попробуйте сбросить гаджет до заводских настроек. Возможно, во время его использования возникли какие-то ошибки или серьезный сбой, что и привело к повреждениям системных компонентов. Помните, что сброс смартфона приведет к удалению всех личных данных и файлов, поэтому предварительно сохраните их на другое устройство или в облако.

Подведем итоги

Android System WebView – это системный компонент, своего рода мини-браузер, отвечающий за просмотр веб-контента в приложениях на телефоне. На Android 5.0-7.0, а также на 10 и новее, если он отключен, вы сможете включить его в настройках устройства. На версиях операционной системы от 7.1 до 9 потребуется остановить Chrome, выполняющий работу WebView, после чего системное приложение запустится автоматически. Если этого не произойдет, вы сможете включить его в параметрах смартфона. На Андроид 4.3-5.0, а также в тех случаях, когда включить компонент не удается, попробуйте обновить его, очистить кэш, перезапустить устройство, а если все это не даст результатов – выполнить сброс гаджета до заводских настроек.

Android System Webview — что это за приложение и почему оно не включается

Краткое описание:
Системный компонент Android для обработки веб-контента в приложениях Android.

Системный компонент Android WebView работает на базе технологий Chrome и позволяет просматривать веб-контент в приложениях Android. Он уже установлен на вашем устройстве. Чтобы обеспечить его безопасность и высокую производительность, не забывайте обновлять его.

Android System WebView что это?

Почему так много вопросов, что это за штука такая? О, ответ прост – информации по ней немного, а все комментарии, в которых обычно пользователи разъясняют спорные моменты, по нашим русским традициям забиты шутками с разной долей юмора.

На самом деле, сущность Android System WebView предельная ясна – это системный компонент, аналог веб-браузера, благодаря которому вы можете просматривать страницы. Он с самого начала будет установлен на вашем устройстве и единственное, что от вас нужно, так это его обновление. С помощью WebView вы сможете отобразить любой контент на смартфоне, включая ваш собственный. Построен этот компонент на движке WebKit, что позволяет ему загружать страницы так же, как Chrome или Safari. В общем, вещь необходимая, тем более, что платить за неё не надо.

Однако в ней есть и проблемы. Во-первых, пользователи жалуются, что порой WebView до неприличного много жрёт памяти, и отобрать свои родимые мегабайты не так-то просто. Универсальное решение трабла так и не найдено. Во-вторых, отказ выпуска обновлений для более старых версий андроида, начиная с 4.3. Причины? «Не хотим и не будем пересматривать код». При этом любому понятно, что уязвимость движка браузера означает уязвимость приложений системы – все они так или иначе с ним связаны.
Источник>>

Требуется Android: 5.0+
Русский интерфейс: N/A

Версия: 86.0.4240.185 (4 variants) от Google Play Market (gorand39)
Версия: 86.0.4240.114 (4 variants) от Google Play Market (gorand39)
Версия: 86.0.4240.110 (4 variants) от Google Play Market (gorand39)
Версия: 86.0.4240.99 (4 variants) от Google Play Market (gorand39)
Версия: 86.0.4240.75 (4 variants) от Google Play Market (gorand39)
Версия: 85.0.4183.127 (4 variants) от Google Play Market (gorand39)
Версия: 85.0.4183.120 (4 variants) от Google Play Market (gorand39)
Версия: 85.0.4183.101 (4 variants) от Google Play Market (gorand39)
Версия: 85.0.4183.81 (4 variants) от Google Play Market (gorand39)
Версия: 84.0.4147.125 (4 variants) от Google Play Market (gorand39)
Версия: 84.0.4147.111 (4 variants) от Google Play Market (gorand39)
Версия: 84.0.4147.105 (4 variants) от Google Play Market (gorand39)
Версия: 84.0.4147.89 (4 variants) от Google Play Market (gorand39)
Версия: 83.0.4103.106 (4 variants) от Google Play Market (gorand39)
Версия: 83.0.4103.101 (4 variants) от Google Play Market (gorand39)
Версия: 83.0.4103.96 (4 variants) от Google Play Market (gorand39)
Версия: 83.0.4103.83 (4 variants) от Google Play Market (gorand39)
Версия: 81.0.4044.138 (2 variants) от Google Play Market (gorand39)
Версия: 81.0.4044.117 (ARM7a / ARM7a + ARM64-8a) от Google Play Market (gorand39)
Версия: 81.0.4044.117 Google Play (fozii)
Версия: 83.0.4103.14 от 16/04/2020 (vladmira)
Версия: 81.0.4044.111 (2 variants) от Google Play Market (gorand39)
Версия: 81.0.4044.96 (2 variants) от Google Play Market (gorand39)
Версия: 80.0.3987.162 (2 variants) от Google Play Market (gorand39)
Версия: 80.0.3987.149 от 17/03/2020 (vladmira)
Версия: 80.0.3987.132 (2 variants) от Google Play Market (gorand39)
Версия: 80.0.3987.119 от 24/02/2020 (vladmira)
Версия: 80.0.3987.119 (build 3987119×0, 3 variants) от Google Play Market (gorand39)
Версия: 80.0.3987.117 от 18/02/2020 (vladmira)
Версия: 80.0.3987.117 (2 variants) от Google Play Market (gorand39)
Версия: 80.0.3987.99 обновление от Google Play Market (gorand39)
Версия: 80.0.3987.99 от 11/02/2020 (vladmira)
Версия: 80.0.3987.87 (3 variants) от Google Play Market (gorand39)
Версия: 79.0.3945.136 от 21/01/2020 (vladmira)
Версия: 79.0.3945.116 от 07/01/2020 (vladmira)
Версия: 79.0.3945.93 от 18/12/2019 (vladmira)
Версия: 79.0.3945.79 от 10/12/2019 (vladmira)
Версия: 78.0.3904.108 от 19/11/19 (Torento/737)
Версия: 78.0.3904.62 от 25/10/19 (Torento/737)
Версия: 77.0.3865.116 от 09/10/19 (Torento/737)
Версия: 77.0.3865.116 от 8/10/19. (seve-s)
Версия: 77.0.3865.92 от 19/09/19 (Torento/737)
Версия: 77.0.3865.92 от 19.09.2019 (seve-s)
Версия: 77.0.3865.73 от 10/09/19 (Torento/737)
Версия: 77.0.3865.73 arm+arm64. (seve-s)
Версия: 76.0.3809.132 от 26/08/19 (Torento/737)
Версия: 76.0.3809.111 от 13/08/19 (Torento/737)
Версия: 76.0.3809.111 ARM+ARM64 (utf8)
Версия: 76.0.3809.89 от 31/07/19 (Torento/737)
Версия: 75.0.3770.143 (arm, x86) Android System WebView (Torento/737)
Версия: 75.0.3770.143 (arm+arm64) (utf8)
Версия: 75.0.3770.101 Android System WebView (Torento/737)
Версия: 75.0.3770.101 ARM64 (utf8)
Версия: 75.0.3770.89 новый билд Android System WebView (Torento/737)
Версия: 75.0.3770.89 старый билд Android System WebView (fozii)
Версия: 74.0.3729.112 74.0.3729.112
Версия: 71.0.3578.98 ARMv7+ARMv8 Android System WebView (Пост utf8 #80069990)
Версия: 71.0.3578.98 ARM Android System WebView (Пост алекс12 #80067811)
Версия: 69.0.3497.100 Android System WebView (Пост алекс12 #77120119)
Версия: 73.0.3683.90Android System WebView
Версия: 71.0.3578.83 Android System WebView (Пост vovanKARPO #79751063)
Версия: 69.0.3497.100 Android System WebView (Пост strannik775577 #77119852)
Версия: 71.0.3578.20 beta Сообщение №1087, автор Connor_Dechart
Версия: 69.0.3497.91 Сообщение №1024, автор алекс12
Версия: 69.0.3497.86 Android System WebView (Пост vovanKARPO #76785487)
Версия: 69.0.3497.76 Android System WebView (Пост vovanKARPO #76595971)
Версия: 68.0.3440.91 Android System WebView (Пост Displax #75805163)
Версия: 68.0.3440.85 Сообщение №990, автор vovanKARPO
Версия: 68.0.3440.85 Сообщение №991, автор алекс12
Версия: 67.0.3396.87 Сообщение №954, автор vovanKARPO
Версия: 67.0.3396.81 Сообщение №951, автор vovanKARPO
Версия: 67.0.3396.68 Android System WebView (Пост vovanKARPO #73780230)
Версия: 66.0.3359.158 Android System WebView (Пост vovanKARPO #73111934)
Версия: 66.0.3359.126 Сообщение №917, автор vovanKARPO
Версия: 66.0.3359.106 Android System WebView (Пост Displax #72324403)
Версия: 65.0.3325.144 Сообщение №883, автор vovanKARPO
Версия: 64.0.3282.137 Сообщение №837, автор vovanKARPO
Версия: 64.0.3282.123 Сообщение №814, автор vovanKARPO
Версия: 64.0.3282.116 Сообщение №808, автор vovanKARPO
Версия: 63.0.3239.111 Android System WebView (Пост vovanKARPO #68180616)
Версия: 63.0.3239.107 (arm64) Android System WebView (Пост strannik775577 #68118799)
Версия: 63.0.3239.107 (arm) Android System WebView (Пост vovanKARPO #68119478)
Версия: 63.0.3239.107 (x86) Android System WebView (Пост алекс12 #68104049)
Версия: 63.0.3239.83 Android System WebView (Пост vovanKARPO #67818103)
Версия: 62.0.3202.84 (arm/arm64) Android System WebView (Пост vovanKARPO #66655961)
Версия: 62.0.3202.84 (x86) Android System WebView (Пост алекс12 #66769933)
Версия: 62.0.3202.73 Android System WebView (Пост vovanKARPO #66368276)
Версия: 62.0.3202.66 Android System WebView (Пост Displax #66172994)
Версия: 61.0.3163.98 Android System WebView (Пост Displax #65217126)
версия: 61.0.3163.81 Android System WebView (Пост vovanKARPO #64749423)
версия: 60.0.3112.116 Android System WebView (Пост vovanKARPO #64595646)
версия: 60.0.3112.107 Android System WebView (Пост Displax #64189026)
версия: 60.0.3112.97 Android System WebView (Пост vovanKARPO #63915893)
версия: 60.0.3112.78 Android System WebView (Пост vovanKARPO #63528492)
версия: 59.0.3071.125 Android System WebView (Пост vovanKARPO #62801963)
версия: 59.0.3071.122 (arm64) Android System WebView (Пост vovanKARPO #62789658)
версия: 59.0.3071.122 (arm) Android System WebView (Пост maskit166 #62769617)
версия: 59.0.3071.122 (x86,x86_64) Android System WebView (Пост Displax #62793262)
версия: 59.0.3071.92 Android System WebView (Пост vovanKARPO #62145023)
версия: 60.0.3112.43 beta Android System WebView (Пост Displax #62605888)
версия: 60.0.3112.43 beta (х86) Android System WebView (Пост vovanKARPO #62618814)
версия: 59.0.3071.82 (x86 + x86_64) Android System WebView (Пост vovanKARPO #61979752)
версия: 59.0.3071.82 (arm/arm64) Android System WebView (Пост Displax #61968007)
версия: 59.0.3071.36 (x86 + x86_64) Android System WebView (Пост dafola #61088547)
версия: 58.0.3029.83 (arm/x86+x86_64) Android System WebView (Пост Displax #60665194)
версия: 58.0.3029.83 (arm64) Android System WebView (Пост vovanKARPO #60687531)
версия: 57.0.2987.132 Android System WebView (Пост Displax #59897210)
версия: 57.0.2987.108 (х86)Android System WebView (Пост Displax #59431682)
версия: 57.0.2987.108 (arm64) Android System WebView (Пост And_RU #59430809)
версия: 57.0.2987.108 (arm, х86)Android System WebView (Пост Displax #59431682)
версия: 56.0.2924.87 Android System WebView (Пост Displax #57893107)
версия: 56.0.2924.78 Android System WebView (Пост Displax #57625465)
версия: 55.0.2883.91 Android System WebView (Пост Displax #55984421)
версия: 55.0.2883.84 Android System WebView (Пост Displax #55867653)
версия: 54.0.2840.85 (х86) Android System WebView (Пост bulat42 #54937188)
версия: 54.0.2840.85 (arm64; arm) Android System WebView (Пост vovanKARPO #54913801)
версия: 54.0.2840.68 Android System WebView (Пост Displax #54267128)
версия: 54.0.2840.61 Android System WebView (Пост Displax #54052493)
версия: 53.0.2785.124 (x86) Android System WebView (Пост алекс12 #53331057)
версия: 53.0.2785.124 (arm, arm64, x86_64) Android System WebView (Пост Displax #53214013)
версия: 53.0.2785.121 Android System WebView (Пост Displax #53187008)
версия: 52.0.2743.98 (x86_64) Android System WebView (Пост LVware #51848446)
версия: 53.0.2785.113 Android System WebView (Пост VernyjPes #53084512)
версия: 53.0.2785.97 Android System WebView (Пост Иван Н #52938624)
версия: 52.0.2743.98 (ARM + ARM64 + x86) Android System WebView (Пост Displax #51846566)
версия: 51.0.2704.54 arm64 + arm Android System WebView (Пост VLADFIONOV #49727546)
Версия: 51.0.2704.81 х86 Android System WebView (Пост LVware #50390283)
версия: 50.0.2661.86 x86 Android System WebView (Пост VLADFIONOV #49379939)
версия: 50.0.2661.86 arm, arm64 Android System WebView (Пост Displax #49034779)
версия: 49.0.2623.105 arm, arm64, x86 Android System WebView (Пост Displax #48648255)
версия: 49.0.2623.105 x86_64 Android System WebView (Пост LVware #48802884)
версия: 50.0.2661.35 x86 Android System WebView (Пост VLADFIONOV #48035704)
версия: 50.0.2661.35 arm, arm64 Android System WebView (Пост VLADFIONOV #48035704)
версия: 49.0.2623.91 arm Android System WebView (Пост VLADFIONOV #47781005)
версия: 48.0.2564.106 (х86) Android System WebView (Пост bulat42 #47506815)
версия: 49.0.2623.63 (arm + arm64) Android System WebView (Пост VLADFIONOV #47449906)
версия: 48.0.2564.106 arm Android System WebView (Пост VLADFIONOV #47124277)
версия: 48.0.2564.99 (arm + arm64) Android System WebView (Пост VLADFIONOV #46663337)
версия: 48.0.2564.85 (arm + arm64) Android System WebView (Пост VLADFIONOV #46540802)
версия: 48.0.2564.79 (arm) Android System WebView (Пост VLADFIONOV #46180718)
версия: 47.0.2526.100 (х86) Android System WebView (Пост VLADFIONOV #46602522)
версия: 47.0.2564.71 (arm + arm64) Android System WebView (Пост VLADFIONOV #45943465)
версия: 47.0.2526.100 (arm) Android System WebView (Пост VLADFIONOV #45876876)
версия: 47.0.2526.100 (arm + arm64) Android System WebView (Пост VLADFIONOV #45901820)
версия: 47.0.2526.99 arm Android System WebView (Пост VLADFIONOV #45354428)
версия: 46.0.2490.76 (х86)Android.Webview_46.0.2490.76(x86).apk ( 28.45 МБ )
версия: 47.0.2526.77 (arm) com.google.android.webview_47.0.2526.77.apk ( 25,57 МБ )
версия: 47.0.2526.77 (arm + arm64) com.google.android.webview_47.0.2526.77(arm64).apk ( 45,86 МБ )
версия: 47.0.2526.68 (arm) Android.Webview_47.0.2526.68(armv7).apk ( 25.57 МБ )
версия: 47.0.2526.68 (arm + arm 64) Android.Webview_47.0.2526.68(arm,arm64).apk ( 45.86 МБ )

Android WebView: актуальные проблемы и их решение

На прошедшей встрече AndroidDevs Meetup выступили несколько разработчиков из команды мессенджера ICQ. Мой доклад был посвящен Android WebView. Для всех, кто не смог приехать на встречу, публикую здесь статью по мотивам выступления. Пойду по верхам, крупными штрихами. Глубоких технических деталей и много кода давать не буду. Если вас заинтересуют подробности, по ссылке в конце поста можно скачать приложение, специально написанное в качестве иллюстрации, и все увидеть на примерах.

Что такое WebView?

WebView — это компонент платформы Android, который позволяет встраивать web-страницы в Android-приложения. По сути, это встраиваемый браузер. При помощи WebView примерно год назад мы решили создать ICQ Web API для интеграции web-приложений в наш мессенджер. Что представляет собой web-приложение? По сути, это HTML-страница, которая содержит JavaScript и работает внутри ICQ. Используя ICQ Web API, web-страницы через JavaScript могут отдавать ICQ разные команды, допустим, на отправку сообщений, открытие чата и т.п.

Вот как это выглядит в ICQ. Из пункта Applications можно перейти в список приложений. Это пока еще не WebView, чтобы попасть в него, нужно выбрать одно из приложений. Тогда мы переходим непосредственно в WebView, куда web-приложение загружается из сети.

Как это устроено технически? У WebView есть возможность определенным образом инжектировать Java код в JavaScript. JavaScript может вызывать код, который мы написали и предоставили ему. Это возможность, на которой и основан весь ICQ Web API.

Здесь показано, что внутри ICQ работает WebView, между ними есть инжектированный Java-класс, а в WebView загружаются приложения из сети.

Итак, JavaScript из WebView делает вызовы к Java-коду ICQ. Существует большое число различных вызовов, и в процессе разработки встретилось множество проблем, связанных с работой этого механизма, о которых я и расскажу далее.

Проблемы при работе с WebView

После старта загрузки обычно бывает нужно проконтролировать этот процесс: узнать, успешно ли прошла загрузка, были ли редиректы, отследить время загрузки и другие вещи. Также будет сказано о потоках, в которых работает JavaScript и вызовы в Java, о несоответствии типов Java и JavaScript, поведении Alerts в JavaScript и размерах передаваемых данных. Решение для этих проблем будет также описано дальше.

Основы WebView

В двух словах об основах WebView. Рассмотрим четыре строки кода:

Тут видно, что мы получаем WebView и загружаем в него сайт example.com, вызвав WebView.loadURL(). В Android есть два важных класса: WebViewClient и WebChromeClient, которые взаимодействуют с WebView. Зачем они нужны? WebViewClient требуется для того, чтобы контролировать процесс загрузки страницы, а WebChromeClient — чтобы взаимодействовать с этой страницей после того, как она успешно загружена. До завершения загрузки страницы работает WebViewClient, а после — WebChromeClient. Как видно в коде, для того чтобы взаимодействовать с WebView, нам нужно создать собственные инстансы этих классов и передать их в WebView. Далее WebView при определенных условиях вызывает разные методы, которые мы переопределили в наших инстансах, и так мы узнаем о событиях в системе.

Наиболее важные методы, которые WebView вызывает у созданных нами инстансов WebViewClient и WebChromeClient:

WebViewClient WebChromeClient
onPageStarted() openFileChooser(), onShowFileChooser()
shouldOverrideUrlLoading() onShowCustomView(), onHideCustomView()
onPageFinished(), onReceivedError() onJsAlert()

О назначении всех этих методов буду рассказывать немного позднее, хотя из самих названий уже многое понятно.

Контроль загрузки страницы в WebView

После того, как мы отдали WebView команду на загрузку страницы, следующим шагом нужно узнать результат выполнения: загрузилась ли страница. С точки зрения официальной Android-документации, все просто. У нас есть метод WebViewClient.onPageStarted(), который вызывается, когда страница начинает загружаться. В случае редиректа вызывается WebViewClient.shouldOverrideUrlLoading(), если страница загрузилась — WebViewClient.onPageFinished(), если не загрузилась — WebViewClient.onReceivedError(). Все кажется логичным. Как это происходит на самом деле?

ОЖИДАНИЕ:

  1. onPageStarted→ shouldOverrideUrlLoading (если редирект) → onPageFinished / onReceivedError

РЕАЛЬНОСТЬ:

  1. onPageStarted → onPageStarted → onPageFinished
  2. onPageStarted → onPageFinished → onPageFinished
  3. onPageFinished → onPageStarted
  4. onReceivedError → onPageStarted → onPageFinished
  5. onReceivedError → onPageFinished (no onPageStarted)
  6. onPageFinished (no onPageStarted)
  7. shouldOverrideUrlLoading → shouldOverrideUrlLoading

На самом деле, все всегда по-разному и зависит от конкретного устройства: onPageStarted(), onPageFinished() и другие методы могут вызываться два раза, все методы могут вызываться в разном порядке, а некоторые могут не вызываться совсем. Особенно часто подобные проблемы возникают на Samsung и Google Nexus. Проблему эту приходится решать при помощи добавления дополнительных проверок в наш инстанс класса WebViewClient. Когда он начинает работать, мы сохраняем URL и затем проверяем, что загрузка происходит именно по этому URL. Если она завершилась, то проверяем на наличие ошибок. Так как код большой, приводить его не буду. Предлагаю посмотреть самостоятельно в примере, ссылка на который будет в конце.

Инжектирование кода Java в JavaScript

Пример кода Java:

Пример кода JavaScript:

Здесь показан пример инжектирования кода Java в JavaScript. Создается коротенький Java-класс MyJavaInterface, и у него есть один единственный метод getGreeting(). Обратите внимание, что этот метод помечен маркирующим интерфейсом @JavaScriptInterface — это важно. Вызывая метод WebView.addJavascriptInterface(), мы пробрасываем данный класс в WebView. Ниже мы видим, как к нему можно обращаться из JavaScript, вызвав test.getGreeting(). Важным моментом здесь является имя test, которое впоследствии в JavaScript будет использовано как объект, через который можно делать вызовы к нашему Java-коду.

Если мы поставим breakpoint на строку return «Hello JavaStript!» и посмотрим имя потока, в котором получен вызов, какой это будет поток? Это не UI-поток, а специальный поток Java Bridge. Следовательно, если при вызове каких-то методов Java мы хотим манипулировать с UI, то нам нужно позаботиться о том, чтобы эти операции передавались в UI-поток — использовать хэндлеры или любой другой способ.

Второй момент: Java Bridge поток нельзя блокировать, иначе JavaScript в WebView просто перестанет работать, и никакие действия пользователя не будут иметь отклика. Поэтому если нужно делать много работы, задачи нужно также отправлять в другие потоки или сервисы.

Несоответствие типов Java в JavaScript

Когда мы вызываем некоторые методы, написанные на Java и инжектированные в JavaScript, как показано выше, возникает проблема несоответствия типов Java и JavaScript. В этой таблице приведены основные правила мапинга между системами типов:

Java -> JavaScript JavaScript -> Java
byte, short, char, int, long, float, double Number Number Byte, short, int, long, float, double ( не Integer, Byte, Short, Long, Float, Double и не char)
boolean Boolean Boolean boolean (не Boolean)
Boolean, Integer, Long, Character, Object Object Array, Object, Function null
String String (Object) String String (не char[])
char[], int[], Integer[], Object[] undefined undefined null
null undefined null null

Самое основное, что стоит здесь заметить, — то, что объектные обертки не передаются. А из всех Java-объектов в JavaScript мапится только String. Массивы и null в Java преобразуются в undefined в JavaScript.

С передачей в обратную сторону, из JavaScript в Java, тоже есть нюансы. Если вызывать какой-то метод, имеющий параметрами элементарные типы, то можно передать туда number. А если среди параметров метода есть не элементарные типы, а скажем, объектные обертки, такие как Integer, то такой метод не будет вызван. Поэтому нужно пользоваться только элементарными типами Java.

Размеры данных, передаваемых между Java и JavaScript

Еще одна существенная проблема связана с объемом передаваемых данных между Java и JavaScript. Если передается достаточно большой объем данных (например, картинки) из JavaScript в Java, то при возникновении ошибки OutОfMemory, поймать ее не получится. Приложение просто падает. Вот пример того, что можно увидеть в logcat в этом случае:

Как видите, если в приложении происходит OutOfMemory, то начинают вылетать различные другие приложения, запущенные на устройстве. В итоге, закрыв все что можно, Android доходит до нашего приложения, и, так как оно находится в foreground, закрывает его последним. Еще раз хочу напомнить, что никакого исключения мы не получим, приложение просто упадет. Чтобы этого не происходило, необходимо ограничивать размер передаваемых данных. Многое зависит от устройства. На некоторых гаджетах получается передавать 6 мегабайт, на некоторых 2-3. Для себя мы выбрали ограничение в 1 мегабайт, и этого достаточно для большинства устройств. Если нужно передать больше, то данные придется резать на чанки и передавать частями.

JavaScript Alerts

По умолчанию диалог Alert в WebView не работает. Если загрузить туда страницу HTML с JavaScript и выполнить alert(‘Hello’), то ничего не произойдет. Чтобы заставить его работать, нужно определить свой инстанс WebChromeClient, переопределить метод WebChromeClient.onJSAlert() и в нем вызвать у него super.onJSAlert(). Этого достаточно, чтобы Alerts заработали.

Обработка изменения ориентации устройства

Ещё одна серьезная проблема связана с портретной и альбомной ориентацией. Если поменять ориентацию устройства, то по умолчанию Activity будет пересоздана. При этом все View, которые к ней прикреплены, тоже будут пересозданы. Представьте ситуацию: есть WebView, в который загружена некая игра. Пользователь доходит до 99 уровня, поворачивает устройство, и инстанс WebView с игрой пересоздается, страница загружается заново, и он снова на первом уровне. Чтобы этого избежать, мы используем мануальную обработку смены конфигурации устройства. В принципе, это вещь известная и описана в официальной документации. Для этого достаточно прописать в AndroidManifest.xml в разделе активити параметр configChanges.

Это будет означать, что мы сами обрабатываем смену ориентации в activity. Если ориентация изменится, мы получаем вызов Activity.onConfigurationChange() и можем поменять какие-то ресурсы программно. Но обычно activity с WebView имеют только сам WebView, растянутый на весь экран, и там ничего делать не приходится. Он просто перерисовывается и все продолжает нормально работать. Таким образом, установка configChanges позволяет не пересоздавать Activity, и все View, которые в нем присутствуют, сохранят свое состояние.

Полноэкранный медиаплеер

Если в web-страницу встроен медиаплеер, то часто возникает потребность обеспечить возможность его работы в полноэкранном режиме. Например, медиаплеер youtube может работать внутри web-страницы в html-теге iframe, и у него есть кнопка переключения в полноэкранный режим. К сожалению, в WebView по умолчанию это не работает. Чтобы заставить это работать, нужно сделать несколько манипуляций. В xml layout, в котором расположен WebView, разместим дополнительно FrameLayout. Это контейнер, который растянут на весь экран и в котором будет находится View с плеером:

А затем в своем инстансе WebChromeClient переопределим несколько методов:

Система вызывает WebChromeClient.onShowCustomView(), когда юзер нажимает на кнопку перехода в полноэкранный режим в плеере. оnShowCustomView() принимает View, которое и репрезентует сам плеер. Этот View вставляется в FullScreenContainer и делается видимым, а WebView скрывается. Когда пользователь хочет вернуться из полноэкранного режима, вызывается метод WebChromeClient.onHideCustimView() и проделывается обратная операция: отображаем WebView и скрываем FullScreenContainer.

Input type=”file”

Web-разработчики знают, что этот контейнер используется на web-страницах для того, чтобы пользователь мог выбрать какой-то файл и загрузить его на сервер, либо показать на экране. Для работы этого контейнера в WebView нам нужно переопределить метод WebChromeClient.openFileChooser(). В этом методе есть некий callback, в который нужно передать файл, выбранный пользователем. Никакого дополнительного функционала сам по себе /> не имеет. Диалог выбора файла нам нужно обеспечить. То есть мы можем открыть любой стандартный Android picker, в котором пользователь выберет нужный файл, получить его, например, через onActivityResult(), и передать в callback метода openFileChooser().

Пример кода JavaScript:

Пример кода Java:

Определение состояния сети в JavaScript

В JavaScript есть полезный объект Navigator. У него есть поле onLine, показывающее статус сетевого подключения. Если у нас есть подключение к сети, в браузере это поле имеет значение true, в противном случае — false. Чтобы оно работало корректно внутри WebView, необходимо использовать метод WebView.setNetworkAvailable(). С его помощью мы передаем актуальное сетевое состояние, которое можно получить при помощи сетевого broadcast receiver или любым другим способом, которым вы трекаете сетевое состояние в Android. Делать это нужно постоянно. Если сетевое состояние изменилось, то нужно заново вызвать WebView.setNetworkAvailable() и передать актуальные данные. В JavaScript мы будем получать актуальное значение этого свойства через Navigator.onLine.

Примеры кода

Вопросы и ответы

Вопрос: Есть проект CrossWalk — это сторонняя реализация WebView, позволяющая на старых устройствах использовать свежий Chrome. У вас есть какой-то опыт, вы пробовали его встраивать?
Ответ: Я не пробовал. На текущий момент мы поддерживаем Android начиная с 14-й версии и уже не ориентируемся на старые устройства.

Вопрос: Как вы боретесь с артефактами, которые остаются при прорисовке WebView?
Ответ: Мы с ними не боремся, пробовали — не получилось. Это происходит не на всех устройствах. Решили, что это не настолько вопиющая проблема, чтобы тратить на нее больше ресурсов.

Вопрос: Иногда требуется WebView вложить в ScrollView. Это некрасиво, но иногда требуется по заданию. Это не поощряется, даже где-то запрещается, и после этого возникают недостатки в работе. Но все равно иногда это приходится делать. Например, если вы сверху рисуете WebView, а под ним рисуете какой-то нативный компонент (который должен быть нативным согласно требованию), и все это должно быть выполнено в виде единого ScrollView. То есть сначала пользователь посмотрел бы всю страничку, а потом, если бы захотел, то долистал бы до этих нативных компонентов.
Ответ: К сожалению, не могу вам ответить, потому что я не сталкивался с такой ситуацией. Она довольно специфическая, и представить себе вариант, когда нужно WebView положить в ScrollView, мне сложно.

Вопрос: Есть почтовое приложение. Там сверху шапка с получателями и со всем остальным. Даже в этом случае не все будет гладко. У WebView возникают большие проблемы, когда он пытается определить свой размер внутри ScrollView.
Ответ: Можно попробовать отрисовать означенную часть UI внутри WebView.

Вопрос: То есть полностью перенести всю логику из нативной части в WebView и оставить эти контейнеры?
Ответ: Даже, может быть, логику переносить не надо, имеется в виду инжектирование Java-классов. Логику можно оставить и вызывать через инжектированный класс. В WebView можно перенести только UI.

Вопрос: Вы упоминали про игры в мессенджере. Они представляют собой web-приложения?
Ответ: Да, это web-страницы с JavaScript внутри WebView.

Вопрос: Вы все это делаете, чтобы просто не переписывать игры нативно?
Ответ: И для этого тоже. Но основная идея в том, чтобы дать сторонним разработчикам возможность создавать приложения, которые могут встраиваться в ICQ, и с помощью этого ICQ Web API взаимодействовать с мессенджером.

Вопрос: То есть в эти игры можно играть также через web-браузер на лэптопе?
Ответ: Да. Она может быть открыта в web-браузере, и мы иногда их прямо в нем и отлаживаем.

Вопрос: А если Intent, допустим, в Chrome прокинуть эту игрушку, какие проблемы тогда будут? Если не свою WebView писать, а воспользоваться услугами?
Ответ: Проблема в том, что в своем WebView мы можем предоставить API через инжектирование Java-класса, и с помощью этого API приложение сможет напрямую взаимодействовать с ICQ, отправлять ему различные команды. Допустим, команду на получение имени пользователя, на получение чатов, которые у него открыты, отправлять сообщения в чат непосредственно из ICQ. То есть из Chrome отправлять сообщения непосредственно в ICQ не получится. В нашем случае все это возможно.

Вопрос: Вы упомянули, что режете данные на куски по одному мегабайту. Как вы их потом собираете?
Ответ: Мы сейчас этого не делаем, потому что у нас нет такой потребности.

Вопрос: Хватает одного мегабайта?
Ответ: Да. Если картинки больше, то пытаемся их ужимать. Я сказал о том, что если такая потребность существует, то это может быть решением — разрезать и собирать потом в Java.

Вопрос: Как вы обеспечиваете безопасность работы приложений в песочнице? Правильно ли я понял, что из JavaScript приложения нужно вызывать инжектированные Java-классы?
Ответ: Да.

Вопрос: Как будет обеспечиваться в этом случае безопасность, запрещен ли доступ к каким-то системным функциям?
Ответ: Прямо сейчас, так как система еще довольно молодая, у нас в основном используются наши собственные web-приложения, и мы им полностью доверяем. В дальнейшем все приложения, которые будут поступать к нам, будут администрироваться, код будет просматриваться, для этого выделена специальная Security Team. Дополнительно будет создана специальная система разрешений, без которых приложения не смогут получить доступ к какой-то критической для пользователя информации.

Android System WebView на смартфонах Xiaomi, Redmi, Poco — что это такое и как работает

В современных телефонах предустановленно много системных программ. О большинстве из них пользователи узнают только в том случае, когда ПО начинает обновляться и на экране появляется соответствующее уведомление. Как правило, в такой ситуации у многих возникают вопросы: что это за приложение, для чего служит и так ли необходимо? Так как некоторые из них действительно важные и заслуживают отдельного внимания, мы решили рассказать об одном из таких в данной статье. Речь пойдет об Android System WebView, встречающемся в смартфонах на базе ОС Android, таких, как Xiaomi, Redmi, Poco с фирменной оболочкой MIUI.

  1. Что такое Android System WebView и для чего применяется
  2. Где найти WebView на Xiaomi (Redmi, Poco) и как активировать
  3. Обновление Android System WebView и решение возможных проблем с апдейтами
  4. Способы обновления
  5. Почему не обновляется и что делать
  6. Ошибки в работе и их исправление
  7. Если появляется сообщение о сбое
  8. Неудачное обновление WebView
  9. Можно ли отключить или удалить приложение
  10. Выводы

Что такое Android System WebView и для чего применяется

Наверняка многие замечали, что при попытках перейти по ссылке на какой-либо сайт из социальной сети или другого приложения, ссылка открывается внутри этой же программы, то есть без перенаправления в отдельное окно браузера — именно для этого была разработана утилита Android System WebView.

  • Удобство — просмотр новостей, информационных сайтов по ссылкам из социальных сетей происходит сразу в программе, без переадресации в браузер, что экономит время и ресурсы системы.
  • Экономия заряда аккумулятора, так как приложение потребляет меньше энергии в отличие от обычных браузеров.
  • Помогает разработчикам в сборе дополнительных данных о ваших действиях для мониторинга и улучшения работы программы, ведь если вы будете использовать сторонний браузер, доступа к этой информации у разработчиков не будет.

Существует множество программ, в коде которых изначально встроено использование в качестве движка Android System WebView. Например, в приложениях для социальных сетей ВКонтакте, Facebook, Одноклассники, Инстаграм, различных мессенджеров, браузеров и других. WebView отвечает за функционирование таких приложений без системных сбоев, поэтому оно должно периодически обновляться для корректной и безопасной работы.

Где найти WebView на Xiaomi (Redmi, Poco) и как активировать

Как правило, приложение активно по умолчанию и входит в состав программного обеспечения устройств, работающих на Android 5.0-7.0 включительно, а также в версиях 10+ операционной системы. Если по тем или иным причинам компонент отключен на вашем устройстве, то включить можно следующим образом. В «Настройках» смартфона необходимо перейти по пути «Приложения и уведомления» — «Показать все приложения» — «Три точки» (в правом верхнем углу экрана) — «Показать системные процессы» — «Android System WebView» — «Включить» .

Начиная с версии Андроид 7.1 и до 9.0 включительно, приложение WebView неактивно по умолчанию, так как большинство его функций стал выполнять браузер Google Chrome. Однако вы все же можете найти данный компонент в памяти телефона, но, при активном Chrome, он будет выключен. Чтобы активировать компонент и закрепить за ним соответствующий функционал, нужно просто отключить Chrome. В Android 7.1-9.0 зайдите через «Настройки» во вкладку «Приложения и уведомления» , далее нажмите «Показать все приложения» (на разных устройствах могут немного отличаться названия кнопок или пунктов меню, поэтому ориентируйтесь по смыслу), найдите в списке «Chrome» и нажмите кнопку «Отключить» .

Так же обратите внимание, что часто само выключение Chrome уже автоматически активирует WebView и других действий (описанных в абзаце выше) может не потребоваться.

Теперь через «Поиск» вы сможете легко найти значок приложения, выглядит он так:

Кликните по названию и если в новом окне увидите кнопку «Включить» , то приложение неактивно. Если кнопка активна, нужно нажать на нее для запуска службы:

Если WebView в списке не найдено, то зайдите в Google Play для скачивания и установки. После этого, чтобы проверить, действительно ли активировано приложение, нужно зайти в меню «Все приложения» и через «Поиск» вы увидите, что все работает.

Обновление Android System WebView и решение возможных проблем с апдейтами

Так как злоумышленники постоянно атакуют наши устройства и ищут уязвимые места в программах, разработчики постоянно дорабатывают защиту и периодически выпускают новые обновления. Для стабильной работы WebView, новые обновления также нужно отслеживать и устанавливать.

Способы обновления

  • В автоматическом режиме при включении соответствующей настройки в Google Play — «Автообновление» . В этом случае все обновления будут устанавливаться устройством без вашего участия.

  • В ручном режиме — в этом случае вы сможете контролировать процесс загрузки обновлений и предотвратить иногда возникающие проблемы, о которых мы расскажем далее.
  • Как обновить WebView вручную:

      Открыть Google Play на смартфоне. Также можете воспользоваться прямой ссылкой на страницу утилиты в маркете:

    Почему не обновляется и что делать

    При обновлении вы можете столкнуться с проблемой, при которой приложение отказывается обновляться. Причины могут быть разными — от банального сбоя или нехватки памяти телефона до более сложных причин.

    Основные варианты исправления проблем с обновлением:

    • Прежде всего, перезагрузите телефон, так как часто большинство вдруг возникающих проблем решается именно перезагрузкой процессов системы.
    • Возможно, скорости вашего интернет-соединения недостаточно для получения данных из магазина Google Play. Если с интернетом все в порядке, возможно какое-то приложение работает в фоновом режиме и мешает загрузке. Закройте его и проблема будет решена.
    • Если у вас много программ и включено автоматическое обновление в Google Play либо вы вручную запустили сразу несколько приложений для загрузки, то они могут мешать друг другу и обновится только часть из них. Для исправления либо выключите автоматическое обновление, либо нажимайте на кнопку «Обновить» поочередно для каждой программы из списка.
    • Возможна ситуация, когда WebView не может обновиться если работает в фоновом режиме. Если это так, остановите приложение, выбрав, как описано выше, WebView в списке «Все программы» , далее нажмите на кнопку «Остановить» и снова запустите повторно загрузку.
    • Если не помогло, то после остановки нужно дополнительно почистить данные и кеш, для чего во вкладке «Память» нужно пройтись по кнопкам «Стереть данные» и «Очистить кэш» .

    Ошибки в работе и их исправление

    В основном все ошибки, которые могут возникнуть в работе данного системного компонента связаны либо с неправильным процессом обновления, либо неудачной его версией и все решается теми же способами, что описаны выше, либо полным удалением обновлений и даже откатом к заводским настройкам.

    Если появляется сообщение о сбое

    1. Зайдите в «Хранилище WebView» через «Приложения» и почистите данные и кеш.
    2. Обновите приложение через Google Play.
    3. При повторении ошибки, если у вас установлена версия Android старше седьмой, попробуйте дополнительно обновить и Google Chrome, это может помочь решить проблему.

    Неудачное обновление WebView

    Неудачно выпущенное обновление может привести к сбою в работе разных стандартных и сторонних программ. Такое уже происходило несколько раз, например, в марте 2021 года из-за WebView произошел сбой в MSA.

    Для исключения или исправления негативных последствий могут помочь следующие шаги:

      Выключите в Google Play возможность автоматического обновления.

  • При ручной загрузке обновлений проверьте предварительно отзывы, нет ли свежей информации о замеченных ошибках, влияющих на нестабильность в работе.
  • Если это все же произошло, то в качестве временной меры, до того момента, пока разработчики не исправят ошибку и не выпустят новое обновление, которое можно будет загрузить вручную, просто зайдите в раздел «Приложения» и выбрав «WebView» нажмите «Удалить обновления» . Таким образом, вы сделаете откат к полностью функционирующей версии утилиты.
  • Можно ли отключить или удалить приложение

    Если у вас Android ниже 7-ой версии, то не следует отключать Android System Webview, так как гарантированно нарушится работа многих приложений, работающих с интернет-контентом в своей среде (утилиты погоды, социальных сетей, мессенджеры и другие).

    В более поздних версиях ОС, данная системная служба также защищена от полного удаления. То есть вы не сможете полностью удалить компонент, но если все же по каким-то причинам это вам мешает, например, вы считаете, что слишком истощаются ресурсы смартфона, то можно провести деактивацию, правда при наличии root-прав:

    1. Получите root-права для вашего устройства.
    2. Зайдите через «Приложения» в Android System WebView.
    3. Нажмите на кнопку «Удалить обновления».
    4. Далее остановите работу приложения, нажав на кнопку «Остановить».

    Теперь приложение перестанет работать и потреблять ресурсы устройства.

    Также если вы не хотите, чтобы та или иная ссылка в мессенджере, социальной сети или клиенте электронной почты открывалась в интерфейсе самого приложения, а переносила вас при открытии в браузер, то зайдите в «Настройки» , перейдите в пункт «Приложения» , далее выберите «Все приложения» и в правом верхнем углу экрана нажмите «Три точки» . Во всплывающем окошке нажмите «Приложения по умолчанию» . Здесь обратите внимание на вкладку «Открытие ссылок» , перейдя в которую напротив пункта «Приложения с мгновенным запуском» переведите переключатель в состояние «Выключено» . Ниже будет отображен список установленных приложений, где можно для каждого настроить данную функцию вручную.

    Выводы

    Android System Webview — полезная системная служба для правильного функционирования многих программ на всех смартфонах с ОС Андроид, особенно для более старых её версий. Рекомендуется регулярно следить за выходом новых версий и стараться не удалять её с памяти устройства.

    В некоторых версиях Android в качестве WebView используются ресурсы браузера Chrome от компании Google, но при этом в случае необходимости данный функционал легко активировать вручную через настройки смартфона. Так же в любом случае необходимо регулярно обновлять оба приложения, что принесет вам радость от бесперебойной работы смартфона.

    Рейтинг
    ( Пока оценок нет )
    Понравилась статья? Поделиться с друзьями:
    Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: