Visionneuse web NameNotFoundException

Je reçois des erreurs de Crashlytics qui indiquent que certains périphériques manquent com.google.android.webview. Comment cela est-il possible?

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) 

Et ce n'est que des appareils utilisant Lollipop. Je l'ai testé sur mon Nexus 5, mais je ne peux pas reproduire l'erreur. J'utilise le proguard

  • Erreur: Impossible de localiser adb dans SDK dans Android Studio
  • Weather APIs pour Android
  • Comment supprimer le fichier de stockage interne dans Android?
  • Partagez la base de données SQLite entre 2 applications Android?
  • Taille de bitmap widget Android
  • Comment puis-je ajouter un troisième bouton à une boîte de dialogue d'alerte Android?
  • My MyWebView ressemble à ceci:

     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 cause principale est la plus importante:

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

    Je pense donc que cela pourrait avoir quelque chose à voir avec Proguard et peut-être avec JavascriptInterface. Des idées?

    EDIT: à partir de grepcode, j'ai trouvé la méthode 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); } } 

  • SplashScreen with Vector streched full screen
  • Really Prefer Network: sélectionnez mon propre fournisseur de réseau dès qu'il est disponible (à partir du code)
  • Android Studio 2.2: je continue à voir "les outils GPU non installés, installez-les maintenant"
  • Comment envelopper un site Web dans une application téléphonique?
  • CardView inside RecyclerView a des marges supplémentaires
  • Comment puis-je créer la superposition de tutoriel gris semi-transparent dans Android?
  • One Solution collect form web for “Visionneuse web NameNotFoundException”

    Il est probable que cela se produise dans les très courts délais immédiatement après la mise à jour de l'application WebView System System de Lollipop.

    J'avais vu cette erreur dans la console Google Play Dev, mais je n'avais jamais pu la reproduire sur mon Nexus 5, peu importe combien j'ai vraiment essayé d'empêcher mon application d'avoir accès à l'application Android System WebView:

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

    Ensuite, nous avons appris que notre application était en panne constante avec le message ci-dessus sur certains périphériques immédiatement après la mise à jour de l'application System WebView, alors j'ai testé cela. Encore aucun résultat, la vanille Nexus 5 a refusé de bloquer notre application! J'ai donc essayé d'autres téléphones d'autres fabricants (environ 75% de nos rapports proviennent de périphériques Samsung Galaxy) et tout à l'heure, nous étions en panne de façon constante. Ma méthode d'essai:

    1. Ouvrez votre application, assurez-vous qu'un WebView s'affiche.
    2. Open Play Store, accédez à "Mes applications" et ouvrez "Android System WebView". Désinstaller les mises à jour. Cela ne devrait pas vous bloquer, mais vous devriez voir le redémarrage de la force de votre application.
    3. Ouvrez votre application et laissez-la récupérer après le redémarrage.
    4. Revenez dans Play Store et mettez à jour Android System WebView.
    5. Ré-recentrez votre application au cours du processus de mise à jour. Maintenant, si vous êtes sur un périphérique affecté, il devrait se bloquer. Si ce n'est pas le cas, votre application sera simplement déplacée en arrière plan et redémarré tranquillement.

    Quelques petites mises en garde avec ce que j'ai dit jusqu'ici:

    • Notre application fait l'erreur de démarrer un WebView très tôt , d'où pourquoi nous sommes "incapables de créer une application" dans notre message de collision. L'utilisateur n'a même pas à regarder notre application pour qu'il se bloque. Je doute que cela s'applique à vous, mais si votre application tente de redémarrer son activité contenant un WebView pendant ce scénario, cela l'expliquerait.
    • 100% de nos rapports proviennent de 5,0 appareils, je n'ai aucun indice sur la façon dont cela pourrait se produire sur tout ce qui précède Lollipop.
    • Nous voyons les rapports de Nexus 4 et Nexus 5 avec cette erreur, donc je ne sais pas pourquoi je ne peux pas le reproduire sur ces périphériques. Peut-être une cause racine distincte, mais je dois approfondir cela.

    Bref, je ne pense pas immédiatement que vous faites quelque chose de incorrect avec ProGuard ou votre version JavascriptInterface. Je me pousse fortement à blâmer le microprogramme en tant que cause principale de la majorité des rapports, ce qui entraîne un processus de mise à jour en douceur, ce qui fait que certaines applications risquent de s'effondrer.

    Edit: J'ai exécuté quelques tests de plus et il s'avère que tous les périphériques qui ne se sont pas crashés sont 5.0 ou 5.0.1, alors que tous les périphériques qui ont été bloqués étaient 5.0.2, donc je ne peux pas facilement me pointer le doigt OEM plus.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.