android - 在 react-native 中打开 webview 时出现 ClassNotFoundException

标签 android reactjs react-native webview

我正在尝试使用以下代码打开一个 webview in react native:

render() {
    console.log("URL in webview:" +this.props.navigation.state.params.url);
    return <WebView source={{ uri: this.props.navigation.state.params.url }} />;
}

但是当我尝试打开一个 URL 时,它给出:

Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/TracingController; 
    at java.lang.Class java.lang.Class.classForName!(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
    at java.lang.Class java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:400)
    at java.lang.Class android.webkit.WebViewFactory.getProviderClass() (WebViewFactory.java:349)
    at android.webkit.WebViewFactoryProvider android.webkit.WebViewFactory.getProvider() (WebViewFactory.java:194)
    at android.webkit.WebViewFactoryProvider android.webkit.WebView.getFactory() (WebView.java:2331)
    at void android.webkit.WebView.ensureProviderCreated() (WebView.java:2326)
    at void android.webkit.WebView.setOverScrollMode(int) (WebView.java:2385)
    at void android.view.View.(android.content.Context) (View.java:4007)
    at void android.view.View.(android.content.Context, android.util.AttributeSet, int, int) (View.java:4126)
    at void android.view.ViewGroup.(android.content.Context, android.util.AttributeSet, int, int) (ViewGroup.java:578)
    at void android.widget.AbsoluteLayout.(android.content.Context, android.util.AttributeSet, int, int) (AbsoluteLayout.java:55)
    at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:627)
    at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
    at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
    at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:542)
    at void android.webkit.WebView.(android.content.Context) (WebView.java:532)
    at void com.facebook.react.views.webview.ReactWebViewManager$ReactWebView.(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:248)
    at com.facebook.react.views.webview.ReactWebViewManager$ReactWebView com.facebook.react.views.webview.ReactWebViewManager.createReactWebViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:357)
    at android.webkit.WebView com.facebook.react.views.webview.ReactWebViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:362)
    at android.view.View com.facebook.react.views.webview.ReactWebViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) (ReactWebViewManager.java:86)
    at android.view.View com.facebook.react.uimanager.ViewManager.createView(com.facebook.react.uimanager.ThemedReactContext, com.facebook.react.touch.JSResponderHandler) (ViewManager.java:44)
    at void com.facebook.react.uimanager.NativeViewHierarchyManager.createView(com.facebook.react.uimanager.ThemedReactContext, int, java.lang.String, com.facebook.react.uimanager.ReactStylesDiffMap) (NativeViewHierarchyManager.java:224)
    at void com.facebook.react.uimanager.UIViewOperationQueue$CreateViewOperation.execute() (UIViewOperationQueue.java:153)
    at void com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.dispatchPendingNonBatchedOperations(long) (UIViewOperationQueue.java:1006)
    at void com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(long) (UIViewOperationQueue.java:977)
    at void com.facebook.react.uimanager.GuardedFrameCallback.doFrame(long) (GuardedFrameCallback.java:31)
    at void com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(long) (ReactChoreographer.java:136)
    at void com.facebook.react.modules.core.ChoreographerCompat$FrameCallback$1.doFrame(long) (ChoreographerCompat.java:107)
    at void android.view.Choreographer$CallbackRecord.run(long) (Choreographer.java:871)
    at void android.view.Choreographer.doCallbacks(int, long) (Choreographer.java:685)
    at void android.view.Choreographer.doFrame(long, int) (Choreographer.java:618)
    at void android.view.Choreographer$FrameDisplayEventReceiver.run() (Choreographer.java:859)
    at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:754)
    at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
    at void android.os.Looper.loop() (Looper.java:165)
    at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6365)
    at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:883)
    at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:773)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.TracingController" on path: 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]] ...

The code works with API level 28, but throw above error in API level 24. I searched that the class TracingController was introduced in API level 28, and i am trying to open webview in API 24, but i dont know how i can i configure it to open in API level 24.

My build.gradle file:

defaultConfig {
        minSdkVersion 21
        targetSdkVersion com.amazon.brazil.android.SDK.platformVersion.toInteger()

关于如何打开 WebView 的任何提示,或者我如何在 API 级别 24 中打开 Webview? 如果我在 API 级别 24 上运行,为什么它会尝试访问 API 级别 28 中引入的文件?

最佳答案

您可能会在 this particular SO answer 中看到同样的问题.

基本上,according to Google ,它是在 O+ 的 WebView 更改中引入的,并触发此消息在 <=N 设备上的 WebView 代码中不正确地记录。这不是实际错误,因此您可以忽略它。

我在我的 webview 代码中为 TracingController 获得了完全相同的 NCDFE,并且可以确认它没有不良影响。不幸的是,它会向日志消息发送垃圾邮件,所以希望他们能尽快修复它。

关于android - 在 react-native 中打开 webview 时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956327/

相关文章:

java.lang.NumberFormatException : unable to parse String as integer 异常

iphone - 关于在 iOS 和 Android 上开发多人游戏的建议?

javascript - 如何在 React 中调用堆栈中的导航事件?

javascript - React Native IOS 生产版本 : RCTFatalException crash and SocketProtocolError YellowBox

android - 检查 Android 中的用户是否已授予权限

Android:不使用谷歌服务器的语音识别

javascript - 在 React 中,更新嵌套数组状态项的正确方法是什么

javascript - React Router Link 中的 Material-UI 组件触发链接

javascript - React 找不到 Material UI 组件的导入

javascript - 在 React Native 中使用 map() 列出数组元素