- Error inflating class android.webkit.WebView after update to last version (2.10.6) on Lollipop #6618
- Comments
- lohrasbii commented Nov 5, 2019
- andrewlewis commented Nov 5, 2019
- google-oss-bot commented Nov 20, 2019
- google-oss-bot commented Nov 28, 2019
- Android.view.InflateException Ошибка раздувания класса android.webkit.WebView
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- [ crash ] android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView #5303
- Comments
- leela52452 commented Jan 25, 2020
- android.view.InflateException Ошибка раздувания класса android.webkit.WebView
- 20 ответов
Error inflating class android.webkit.WebView after update to last version (2.10.6) on Lollipop #6618
Comments
lohrasbii commented Nov 5, 2019
I have an application that contains exoplayer and webviews.
After update to last version of exoplayer (2.10.6) , I am facing this error when try to start an activity that contains webview. Only in Lollipop.
The text was updated successfully, but these errors were encountered:
andrewlewis commented Nov 5, 2019
This might be the same underlying issue as #6577 (see also this Stack Overflow question). Could you provide more information on exactly what the error is?
google-oss-bot commented Nov 20, 2019
Hey @lohrasbii. We need more information to resolve this issue but there hasn’t been an update in 14 days. I’m marking the issue as stale and if there are no new updates in the next 7 days I will close it automatically.
If you have more information that will help us get to the bottom of this, just add a comment!
google-oss-bot commented Nov 28, 2019
Since there haven’t been any recent updates here, I am going to close this issue.
@lohrasbii if you’re still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Android.view.InflateException Ошибка раздувания класса android.webkit.WebView
У меня есть эта проблема, которая пытается убить меня.
В Lollipop (API 22) каждый раз в моем приложении я показываю веб-просмотр, сбой приложения. У меня несколько сбоев в моей консоли разработчика Android, связанных с этим событием.
Не нужно говорить, что он работает на Android 4, 6 и 7.
Чтение трассировки стека (опубликовано в конце этого сообщения), что-то меня пугает
Я искал в сгенерированном R.java без везения, очевидно, потому что идентификатор не существует, но стоит попробовать.
Похоже, что проблема вокруг проблемы связана с тем, как леденец обрабатывает веб-просмотр. Я начал новый AVD с lollipop на основе устройства, которое я нашел в репортере аварии в GDC, и я могу воспроизвести проблему.
Пожалуйста, помогите мне!
Полная трассировка стека:
ОТВЕТЫ
Ответ 1
Предупреждение: этот обходной путь может также сломать некоторые вещи; подробности смотрите в комментариях
Если вы хотите надуть WebView из макета XML, вы можете заключить его в симпатичный маленький подкласс (на основе ответа ikostet):
ОБНОВЛЕНИЕ: теперь еще приятнее с Kotlin
Ответ 2
если вы используете «androidx.appcompat: appcompat: 1.1.0», попробуйте вместо «androidx.appcompat: appcompat: 1.0.2». Кажется, что 1.1.0 не обрабатывает ошибку с веб-просмотром в Android 5.1.1.
Ответ 3
Попробуйте использовать веб-просмотр:
Ответ 4
Мой совет — использовать пользовательскую/новую Configuration только тогда, когда «оригинальная» вызывает проблемы, поэтому только на Lollipop. Код @SpaceBizon работал хорошо до Android 8.x, на 9 и Q (текущая бета) каждое нажатие на выбор / AlertDialog не будет показывать AlertDialog выбора AlertDialog , вместо этого происходит утечка памяти. ниже фиксированного метода getFixedContext с «iffed» правильной версией код
Ответ 5
Если вы используете androidx.appcompat: appcompat: 1.1.0, либо перейдите на androidx.appcompat: appcompat: 1.0.2, либо, если вы хотите использовать тему DayNight, переопределите applyOverrideConfiguration в своей деятельности следующим образом. (Примечание. Для этого требуется перезапуск приложения при переключении с темной темы на светлую и наоборот).
Ответ 6
戴 文锦 был прав и для меня. Но понижение версии androidx.appcompat: appcompat: 1.1.0 до 1.0.2 не удалось.
Я понизил все мои ранее обновленные версии Androidx с
Напоминание о том, что код Googles далеко не без ошибок и хорошо протестирован, и что кто-то никогда не должен обновлять версии легкомысленно.
Ответ 7
Ответ 8
Мне удалось воспроизвести сбой API 21 в эмуляторе.
Поэтому я попытался добавить это к реализации, как описано в документации:
Добавление appcompat-resources не решило проблему.
Возможно, в будущем появится версия, но я хотел бы упомянуть, что, похоже, существует дополнительная библиотека ресурсов, которая должна решить эту проблему. Поэтому, пытаясь исправить это с помощью новой версии appcompat , добавьте библиотеку appcompat-resources с той же версией.
Возвращение к androidx.appcompat:appcompat:1.0.2 решило проблему как обходной путь.
Ответ 9
Если вы не полагаетесь на переключение тем DayNight (или другие события UiMode), вы можете добавить android:configChanges=»uiMode» в манифест активности веб-просмотра, чтобы AppCompatDelegate не обновлял конфигурацию ресурсов и, таким образом, не нарушал инфляцию веб-просмотра. Обнаружил этот обходной путь, изучив исходный код изменений 1.1.0-rc01 в 1.1.0.
Понижение до 1.1.0-rc01 также должно работать.
Источник
[ crash ] android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView #5303
Comments
leela52452 commented Jan 25, 2020
android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.owncloud.android.authentication.AuthenticatorActivity.onNewIntent(AuthenticatorActivity.java:908)
at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1211)
at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1223)
at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2482)
at android.app.ActivityThread.performNewIntents(ActivityThread.java:2494)
at android.app.ActivityThread.handleNewIntent(ActivityThread.java:2503)
at android.app.ActivityThread.access$1600(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1388)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5358)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
. 24 more
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
at android.content.res.Resources.getText(Resources.java:299)
at android.content.res.Resources.getString(Resources.java:385)
at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:686)
at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:610)
at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:632)
at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:781)
at com.android.org.chromium.android_webview.AwContents.(AwContents.java:620)
at com.android.org.chromium.android_webview.AwContents.(AwContents.java:557)
at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:316)
at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96)
at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:268)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110)
at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107)
at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:265)
at android.webkit.WebView.(WebView.java:561)
at android.webkit.WebView.(WebView.java:496)
at android.webkit.WebView.(WebView.java:479)
at android.webkit.WebView.(WebView.java:466)
. 27 more
************ APP INFORMATION ************
ID: com.nextcloud.client
Version: 30090290
Build flavor: generic
************ DEVICE INFORMATION ************
Brand: LYF
Device: u220_tsl_011
Model: LS-4001
Id: LMY47D
Product: u220_tsl_011
************ FIRMWARE ************
SDK: 22
Release: 5.1
Incremental: eng.root.20161122.200724
The text was updated successfully, but these errors were encountered:
Источник
android.view.InflateException Ошибка раздувания класса android.webkit.WebView
В Lollipop (API 22) каждый раз, когда в моем приложении я показываю веб-просмотр, приложение вылетает. У меня несколько сбоев в консоли разработчика Android, связанных с этим событием.
Не нужно говорить, что он работает на Android 4, 6 и 7.
Читая трассировку стека (размещенную в конце этого поста), что-то меня беспокоит
Я безуспешно искал в сгенерированном R.java, очевидно, потому что ID не существует, но попробовать стоило.
Поиск в Google проблемы, похоже, связан с тем, как Lollipop обрабатывает веб-просмотр. Я начал новый AVD с леденцом на палочке на основе устройства, которое я нашел в репортере сбоя в GDC, и я могу воспроизвести проблему.
Полная трассировка стека:
20 ответов
Если вы используете androidx.appcompat:appcompat:1.1.0 , попробуйте вместо него androidx.appcompat:appcompat:1.0.2 . похоже, что 1.1.0 не исправляет ошибку с WebView в Android 5.1.1 .
Обновление за февраль 2020 года: возврат к 1.0.2 перестал работать для многих людей (включая мое приложение), но использование текущей версии androidx.appcompat:appcompat:1.2.0-alpha02 устранило сбой. (Я видел это на Huawei P8 Lite под управлением Android 5.0 во время автоматизированного тестирования Google «Отчет перед запуском»).
Обновление июнь-2020: доступны более новые выпуски, чем тот, который упоминается в обновлении за февраль-2020, вы можете увидеть доступные в настоящее время версии здесь:
Предупреждение: это временное решение также может привести к поломке некоторых вещей; подробности см. в комментариях
Если вы хотите расширить WebView из макета XML, вы можете обернуть его в небольшой приятный подкласс (на основе ответа ikostet ):
РЕДАКТИРОВАТЬ: теперь с Kotlin стало еще лучше
Если вы используете androidx.appcompat:appcompat:1.1.0 и не хотите переходить на androidx.appcompat:appcompat:1.0.2 или обновлять до androidx.appcompat:appcompat:1.2.0-alpha03 , есть другое решение, описанное в этот комментарий в Google Issue Tracker.
Я заметил, что после вызова applyOverrideConfiguration Context.getAssets() и Context.getResources().getAssets() не возвращают один и тот же объект AssetManager. AssetManager, возвращенный из Context.getAssets() , не может получить доступ к ресурсам в других пакетах (включая системный пакет WebView), что вызывает сбой WebView. Если я переопределю Context.getAssets() , чтобы вернуть getResources().getAssets() , проблема исчезнет.
Основываясь на этом комментарии, вы можете переопределить getAssets() в Activity WebView, чтобы вместо этого он возвращал getResources().getAssets() для решения проблемы.
Мой совет — использовать custom / new Configuration только тогда, когда «оригинальный» вызывает проблемы, то есть только на Lollipop. Код @SpaceBizon хорошо работает до Android 8.x, на 9 и Q (текущая бета) каждое нажатие кнопки выбора / раскрывающегося списка не отображает средство выбора AlertDialog , вместо этого происходит утечка памяти . > с правильным кодом версии «iffed»
Если вы используете androidx.appcompat: appcompat: 1.1.0, либо измените его на androidx.appcompat: appcompat: 1.0.2, либо если вы хотите использовать тему DayNight, переопределите applyOverrideConfiguration в своей деятельности следующим образом. (Примечание: для этого требуется перезапуск приложения при переключении с темной темы на светлую и наоборот).
Если вы не полагаетесь на переключение тем DayNight (или другие события UiMode), вы можете добавить android: configChanges = «uiMode» в манифест активности веб-просмотра, чтобы предотвратить обновление AppCompatDelegate конфигурации ресурсов и тем самым испортить инфляция веб-просмотра.
Попробуйте использовать для создания веб-просмотра:
Мне удалось воспроизвести сбой API 21 в эмуляторе.
Поэтому я попытался добавить это к реализации, как описано в документации:
Добавление appcompat-resources не устранило проблему.
Возможно, появится в будущей версии, но я хотел упомянуть, что, похоже, существует дополнительная библиотека ресурсов, которая должна решить эту проблему. Поэтому, пытаясь исправить это с помощью новой версии appcompat , добавьте библиотеку appcompat-resources с той же версией.
Возврат к androidx.appcompat:appcompat:1.0.2 решил проблему в качестве временного решения.
Приведенный ниже код устранит проблему. Добавьте его в свой Activity :
В качестве побочного примечания, я какое-то время боролся, даже несмотря на то, что я понизил версию до 1.0.2, просто потому, что у меня, казалось, была транзитивная зависимость от appcompat: 1.1.0 через androidx.constraintlayout: constraintlayout: 2.0.0-beta3. Как только я понизил это до constraintlayout: 1.1.3, все работало нормально
(Согласно https://issuetracker.google.com/issues/141351441 проблема будет исправлена скоро с appcompat: 1.2.0-alpha02)
戴 文锦 мне тоже подошел. Но понижение только androidx.appcompat: appcompat: с 1.1.0 до 1.0.2 не удалось.
Я понизил все мои ранее обновленные версии androidx с
Напоминание о том, что код Googles далеко не свободен от ошибок и хорошо протестирован, и что кто-то никогда не должен легкомысленно обновлять версии.
AppCompat 1.2.0-alpha02 был выпущен сегодня, поэтому вы можете использовать
Который исправит проблемы WebView на Lollipop.
Мне удалось воспроизвести эту проблему на Nexus 7 API 22. Проблема устранена путем обновления версии Android System WebView для планшета с версии 39 (2237560-arm) до версии 79.0.3945.136
Я не могу этого сделать для пользователя, но это решение, если вам нужно помочь кому-то немедленно использовать ваше приложение.
В моем случае проблема была в методе
Объекта MainActivity. Я не знаю, почему это влияет на WebView . getUserId() не является ни переопределенным, ни публичным методом класса Activity . Если я переименую или удалю этот метод, WebView начнет открываться. Также пытаюсь изменить
Приводит к тому же исключению. Я понял это, когда увидел исключение: Caused by: java.lang.SecurityException: Permission Denial: null asks to run as user 123456 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS . В этом случае user = 123456 на самом деле был моим авторизованным пользователем, который использовался в некоторых запросах, а не в WebView . Я подозреваю, что Android использует userId в качестве локального user_id для своих процессов.
Как заметили многие другие, мы можем использовать appcompat:1.1.0 или 1.0.2 и расширить класс WebView . В эмуляторе 21 без сервисов Google Play этот WebView вылетает при долгом нажатии на текстовые метки, но на типичных устройствах все в порядке.
Вместо того, чтобы изменять версию какой-либо зависимости, я реализовал программную генерацию webView в качестве решения.
Проблема на самом деле выглядит как начало чтения макета из файла xml. Поэтому, если программный способ подходит для вас, пожалуйста, проверьте приведенный ниже образец.
Чем просто добавьте в родительский вид:
Проверить версию. Совместимость приложений Androidx и версия материалов Google всегда одинаковы.
Проблема была решена для меня путем перехода на реализацию androidx.appcompat: appcompat: 1.0.2.
Я использовал последнюю версию из этого источника. Пожалуйста, проверьте и используйте свои собственные, исходя из того, что вы считаете лучшим.
Если вы хотите пропустить, приведенная ниже реализация решает проблему:
И еще одна попытка решить проблему. Следует переопределить этот метод в вашей деятельности:
Источник