android - 在 react-native 中打开 webview 时出现 ClassNotFoundException
问题描述
我正在尝试使用以下代码打开一个 webview 以响应本机:
render() {
console.log("URL in webview:" +this.props.navigation.state.params.url);
return <WebView source={{ uri: this.props.navigation.state.params.url }} />;
}
但是当我尝试打开一个 URL 时,它给出了:
拒绝对先前失败的类 java.lang.Class 重新初始化:java.lang.NoClassDefFoundError:解析失败:Landroid/webkit/TracingController; 在 java.lang.Class java.lang.Class.classForName!(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2) 在 java.lang.Class java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:400) 在 java.lang.Class android.webkit.WebViewFactory.getProviderClass() (WebViewFactory.java:349) 在 android.webkit.WebViewFactoryProvider android.webkit.WebViewFactory.getProvider() (WebViewFactory.java:194) 在 android.webkit.WebViewFactoryProvider android.webkit.WebView.getFactory() (WebView.java:2331) 在 void android.webkit.WebView.ensureProviderCreated() (WebView.java:2326) 在 void android.webkit.WebView.setOverScrollMode(int) (WebView.java:2385) 在 void android.view.View.(android.content.Context) (View.java:4007) 在 void android.view.View.(android.content.Context, android.util.AttributeSet, int, int) (View.java:4126) 在 void android.view.ViewGroup.(android.content.Context, android.util.AttributeSet, int, int) (ViewGroup.java:578) 在 void android.widget.AbsoluteLayout.(android.content.Context, android.util.AttributeSet, int, int) (AbsoluteLayout.java:55) 在 void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:627) 在 void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572) 在 void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:555) 在 void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:542) 在 void android.webkit.WebView.(android.content.Context) (WebView.java:532) 在无效 com.facebook.react.views.webview.ReactWebViewManager$ReactWebView.(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:248) 在 com.facebook.react.views.webview.ReactWebViewManager$ReactWebView com.facebook.react.views.webview.ReactWebViewManager.createReactWebViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:357) 在 android.webkit.WebView com.facebook.react.views.webview.ReactWebViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:362) 在 android.view.View com.facebook.react.views.webview.ReactWebViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:86) 在 android.view.View com.facebook.react.uimanager.ViewManager.createView(com.facebook.react.uimanager.ThemedReactContext, com.facebook.react.touch.JSResponderHandler) (ViewManager.java:44) 在 void com.facebook.react.uimanager.NativeViewHierarchyManager.createView(com.facebook.react.uimanager.ThemedReactContext, int, java.lang.String, com.facebook.react.uimanager.ReactStylesDiffMap) (NativeViewHierarchyManager.java:224) 在 void com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute() (UIViewOperationQueue.java:153) 在 void com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations(long) (UIViewOperationQueue.java:1006) 在 void com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(long) (UIViewOperationQueue.java:977) 在 void com.facebook.react.uimanager.GuardedFrameCallback.doFrame(long) (GuardedFrameCallback.java:31) 在 void com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(long) (ReactChoreographer.java:136) 在 void com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(long) (ChoreographerCompat.java:107) 在 void android.view.Choreographer$CallbackRecord.run(long) (Choreographer.java:871) 在 void android.view.Choreographer.doCallbacks(int, long) (Choreographer.java:685) 在 void android.view.Choreographer.doFrame(long, int) (Choreographer.java:618) 在 void android.view.Choreographer$FrameDisplayEventReceiver.run() (Choreographer.java:859) 在 void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754) 在 void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95) 在 void android.os.Looper.loop() (Looper.java:165) 在 void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6365) 在 java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) 在 void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:883) 在 void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:773) 引起:java.lang.ClassNotFoundException:在路径上找不到类“android.webkit.TracingController”:DexPathList [[zip file“/data/app/com.android.chrome-2/base.apk”],nativeLibraryDirectories =[/data/app/com.android.chrome-2/lib/arm, /data/app/com.android.chrome-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor /lib]] ...
该代码适用于 API 级别 28,但在 API 级别 24 中抛出上述错误。我搜索了类 TracingController 是在 API 级别 28 中引入的,我正在尝试在 API 24 中打开 webview,但我不知道我该如何配置它在 API 级别 24 中打开。
我的 build.gradle 文件:
defaultConfig {
minSdkVersion 21
targetSdkVersion com.amazon.brazil.android.SDK.platformVersion.toInteger()
关于如何打开 WebView 的任何提示,或者我如何在 API 级别 24 中打开 WebView?如果我在 API 级别 24 上运行,为什么它试图访问 API 级别 28 中引入的文件?
解决方案
您可能会在此特定 SO 答案中看到相同的问题。
基本上,根据 Google的说法,它是在 O+ 的 WebView 更改中引入的,并触发此消息在 <=N 设备上的 WebView 代码中不正确地记录。这不是实际错误,因此您可以忽略它。
我在我的 webview 代码中得到了与 TracingController 完全相同的 NCDFE,并且可以确认它没有不良影响。不幸的是,它会向日志消息发送垃圾邮件,因此希望他们能尽快修复它。
推荐阅读
- android - 无法在我自己的手机上安装我签名的发布 apk
- kernel-module - Poky-sumo:没有提供 kernel-module-hello ... 错误
- html - 如何防止我的照片横幅在网页上被截断,并获得自动滚动条?
- python - 如何在 Python 中使用字符串作为函数参数并具有可变数量的参数
- sas - 数据步骤中的多个 by 语句?
- javascript - 循环一个对象
- ios - Realm Swift - 使用模态时对象不更新
- node.js - 如何从预挂钩中检索文档的属性?
- php - 为什么 PDO 查询在服务器上不起作用?
- python - 使用正则表达式替换 Pandas 中的整个列。