mapview inflating inflateexception google gms error android webview proguard android-5.0-lollipop inflate-exception

android - inflating - Vista web de NameNotFoundException



error inflating class com google android gms maps mapview (2)

Es probable que esto suceda en un período de tiempo muy corto, inmediatamente después de las actualizaciones de la aplicación WebView del sistema Android de Lollipop.

Había visto este error en la Consola de desarrollo de Google Play, pero tampoco había podido reproducirlo en mi Nexus 5, independientemente de cuánto intenté realmente impedir que mi aplicación tuviera acceso a la aplicación WebView del sistema Android:

java.lang.RuntimeException: Unable to create application com.uninteresting.app.name: android.util.AndroidRuntimeException: android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview

Luego nos enteramos de que nuestra aplicación se bloqueaba constantemente con el mensaje anterior en algunos dispositivos inmediatamente después de la actualización de la aplicación System WebView, así que probé eso. Todavía no hay resultados, ¡el Nexus 5 de vainilla se negó a bloquear nuestra aplicación! Así que probé otros teléfonos de otros fabricantes (aproximadamente el 75% de nuestros informes son de dispositivos Samsung Galaxy) y de repente estábamos fallando constantemente. Mi metodología de prueba:

  1. Abra su aplicación, asegúrese de que se muestre un WebView.
  2. Abra Play Store, vaya a "Mis aplicaciones" y abra "Vista web del sistema Android". Desinstalar actualizaciones. Esto no debería bloquearte, pero deberías ver que tu aplicación se reinicia forzosamente.
  3. Abre tu aplicación de nuevo y deja que se recupere del reinicio.
  4. Vuelva a Play Store y actualice el sistema Android WebView.
  5. Vuelva a enfocar su aplicación durante el proceso de actualización. Ahora, si está en un dispositivo afectado, debería bloquearse. De lo contrario, su aplicación simplemente será puesta en segundo plano y se reiniciará silenciosamente.

Algunas pequeñas advertencias con lo que he dicho hasta ahora:

  • Nuestra aplicación comete el error de iniciar un WebView extremadamente temprano , de ahí que no podamos crear una aplicación en nuestro mensaje de falla. El usuario ni siquiera tiene que mirar nuestra aplicación para que se bloquee. Dudo que esto se aplique a usted, pero si su aplicación intenta reiniciar su actividad que contiene un WebView durante este escenario, eso lo explicaría.
  • El 100% de nuestros informes son de dispositivos 5.0, no tengo ni idea de cómo podría ocurrir esto en cualquier cosa debajo de Lollipop.
  • Vemos informes de Nexus 4 y Nexus 5 con este error, por lo que no sé por qué no puedo reproducirlo en esos dispositivos. Podría ser una causa raíz separada, pero necesito profundizar en eso.

En resumen, no creo inmediatamente que estés haciendo algo incorrecto con ProGuard o tu JavascriptInterface. Me estoy inclinando fuertemente a culpar al firmware como la causa raíz de la mayoría de los informes, lo que resulta en lo que debería ser un proceso de actualización sin problemas que en su lugar hace que algunas aplicaciones se bloqueen por completo.

Editar: Ejecuté algunas pruebas más y resulta que todos los dispositivos que no se bloquearon son 5.0 o 5.0.1, mientras que todos los dispositivos que sí se bloquearon fueron 5.0.2, por lo que no puedo señalar cómodamente mi dedo OEMs más.

Recibo errores de Crashlytics que indican que faltan algunos dispositivos com.google.android.webview. ¿Cómo es eso posible?

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.app/com.myapp.ReaderActivity}: android.view.InflateException: Binary XML file line #29: Error inflating class com.myapp.MyWebView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class com.myapp.MyWebView at android.view.LayoutInflater.createView(LayoutInflater.java:633) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:206) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:297) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(SourceFile:228) at android.support.v7.app.ActionBarActivity.setContentView(SourceFile:102) at com.myapp.ReaderActivity.onCreate(SourceFile:120) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:206) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:297) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(SourceFile:228) at android.support.v7.app.ActionBarActivity.setContentView(SourceFile:102) at com.myapp.ReaderActivity.onCreate(SourceFile:120) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: android.util.AndroidRuntimeException: android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview at android.webkit.WebViewFactory.getFactoryClass(WebViewFactory.java:161) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:101) at android.webkit.WebView.getFactory(WebView.java:2185) at android.webkit.WebView.ensureProviderCreated(WebView.java:2180) at android.webkit.WebView.setOverScrollMode(WebView.java:2239) at android.view.View.(View.java:3581) at android.view.View.(View.java:3675) at android.view.ViewGroup.(ViewGroup.java:491) at android.widget.AbsoluteLayout.(AbsoluteLayout.java:55) at android.webkit.WebView.(WebView.java:538) at android.webkit.WebView.(WebView.java:483) at android.webkit.WebView.(WebView.java:466) at android.webkit.WebView.(WebView.java:453) at com.myapp.MyWebView.(SourceFile:31) at java.lang.reflect.Constructor.newInstance(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:206) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:297) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(SourceFile:228) at android.support.v7.app.ActionBarActivity.setContentView(SourceFile:102) at com.myapp.ReaderActivity.onCreate(SourceFile:120) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:114) at android.webkit.WebViewFactory.getFactoryClass(WebViewFactory.java:133) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:101) at android.webkit.WebView.getFactory(WebView.java:2185) at android.webkit.WebView.ensureProviderCreated(WebView.java:2180) at android.webkit.WebView.setOverScrollMode(WebView.java:2239) at android.view.View.(View.java:3581) at android.view.View.(View.java:3675) at android.view.ViewGroup.(ViewGroup.java:491) at android.widget.AbsoluteLayout.(AbsoluteLayout.java:55) at android.webkit.WebView.(WebView.java:538) at android.webkit.WebView.(WebView.java:483) at android.webkit.WebView.(WebView.java:466) at android.webkit.WebView.(WebView.java:453) at com.myapp.MyWebView.(SourceFile:31) at java.lang.reflect.Constructor.newInstance(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:206) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:297) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(SourceFile:228) at android.support.v7.app.ActionBarActivity.setContentView(SourceFile:102) at com.myapp.ReaderActivity.onCreate(SourceFile:120) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Y es solo de dispositivos que ejecutan Lollipop. Lo probé en mi Nexus 5, pero no puedo reproducir el error. Estoy usando proguard

Mi MyWebView se ve así:

public class MyWebView extends WebView { public static final String tag = MyWebView.class.getName(); private HtmlJSInterfaceNew js; public MyWebView(Context context) { super(context); gd = new GestureDetector(context, sogl); init(); } public MyWebView(Context context, AttributeSet attrs) { super(context, attrs); gd = new GestureDetector(context, sogl); init(); } public MyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); gd = new GestureDetector(context, sogl); init(); } @SuppressLint("NewApi") private void init() { setPadding(0, 0, 0, 0); MyWebViewClient myWebViewClient = new MyWebViewClient(); this.setWebViewClient(myWebViewClient); setWebChromeClient(new MyWebChromeClient()); if(!isInEditMode()) { getSettings().setAllowFileAccess(true); getSettings().setJavaScriptCanOpenWindowsAutomatically(false); getSettings().setJavaScriptEnabled(true); WebSettings webSettings = getSettings(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { webSettings.setAllowContentAccess(false); } webSettings.setUseWideViewPort(true); } } public void addMyJavascriptInterface(HtmlJSInterfaceNew htmlJSInterface, String string) { js = htmlJSInterface; addJavascriptInterface(htmlJSInterface, string); } public class MyWebChromeClient extends WebChromeClient { public void onProgressChanged(WebView view, int progress) { } } }

La causa principal es:

android.util.AndroidRuntimeException: android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview at android.webkit.WebViewFactory.getFactoryClass(WebViewFactory.java:161)

Así que estoy pensando que podría tener algo que ver con Proguard y tal vez la interfaz Javascript. ¿Algunas ideas?

EDITAR: desde grepcode he encontrado el método getFactoryClass:

private static Class<WebViewFactoryProvider> getFactoryClass() throws ClassNotFoundException { Application initialApplication = AppGlobals.getInitialApplication(); try { // First fetch the package info so we can log the webview package version. String packageName = getWebViewPackageName(); sPackageInfo = initialApplication.getPackageManager().getPackageInfo(packageName, 0); Log.i(LOGTAG, "Loading " + packageName + " version " + sPackageInfo.versionName + " (code " + sPackageInfo.versionCode + ")"); // Construct a package context to load the Java code into the current app. Context webViewContext = initialApplication.createPackageContext(packageName, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); initialApplication.getAssets().addAssetPath( webViewContext.getApplicationInfo().sourceDir); ClassLoader clazzLoader = webViewContext.getClassLoader(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()"); try { return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY, true, clazzLoader); } finally { Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); } } catch (PackageManager.NameNotFoundException e) { // If the package doesn''t exist, then try loading the null WebView instead. // If that succeeds, then this is a device without WebView support; if it fails then // swallow the failure, complain that the real WebView is missing and rethrow the // original exception. try { return (Class<WebViewFactoryProvider>) Class.forName(NULL_WEBVIEW_FACTORY); } catch (ClassNotFoundException e2) { // Ignore. } Log.e(LOGTAG, "Chromium WebView package does not exist", e); throw new AndroidRuntimeException(e); } }


Esto sucede cuando Chrome actualiza en Android: durante la actualización, el paquete no cuenta como instalado y, por lo tanto, los intentos de buscarlo en el administrador de paquetes fallarán.

En mi caso, persistió durante un tiempo más largo (la aplicación siguió fallando) hasta que realmente reinicié / reinicié el dispositivo , entonces todo está bien.

No hay nada malo con su código, es solo cómo se manejan las actualizaciones.

Fuente: https://bugs.chromium.org/p/chromium/issues/detail?id=506369