ClassNotFoundException和BIND_EXTERNAL_SERVICE以及Android WebView崩溃

yzuktlbb  于 2022-12-25  发布在  Android
关注(0)|答案(5)|浏览(170)

一个极其简单的应用API level 24(Android 7.0)尝试在实际物理设备上的唯一Activity中加载WebView,在日志中显示以下内容并停止应用:

I/cr_DRP: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp

以及

W/System.err: java.lang.SecurityException: BIND_EXTERNAL_SERVICE failed, ComponentInfo{com.android.webview/org.chromium.content.app.SandboxedProcessService0} is not an externalService

以及

A/chromium: [FATAL:jni_android.cc(233)] Check failed: false. Please include Java exception stack in crash report
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 6989 (Chrome_ProcessL)

怎么回事?某种版本/依赖关系问题?如何才能更正?
用于WebView的XML:

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

网络视图代码:

mWebView = findViewById(R.id.webview);
mWebView.loadUrl("https://google.com");

完整项目:https://github.com/qabi/webviewtest

2g32fytz

2g32fytz1#

我也面临着类似的问题与java.lang.SecurityException: BIND_EXTERNAL_SERVICE,在我的情况下,互联网许可是失踪的manifest.xml。

uses-permission android:name="android.permission.INTERNET"
vmjh9lq9

vmjh9lq92#

可能的原因是尚未启用JavaScript(默认情况下禁用):

mWebView = findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("https://google.com");
qxgroojn

qxgroojn3#

首先检查清单中是否正确提供了权限。

uses-permission android:name="android.permission.INTERNET"

如果这是包括当我们加载的网址默认它尝试重定向到chrome浏览器。我认为这是造成崩溃。不确定无论如何。添加以下代码停止它。

mWebView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url){                   
                    view.loadUrl(url);
                    return false; // then it is not handled by default action
           }
});
kqhtkvqz

kqhtkvqz4#

Webview对象将为wv

wv.setWebChromeClient(
            new WebChromeClient() {

                long mStartRX = TrafficStats.getTotalRxBytes();
                long mStartTX = TrafficStats.getTotalTxBytes();

                @Override
                public void onConsoleMessage(String message, int lineNumber, String sourceID) {
                    Log.d("MyApplication", message + " -- From line "
                            + lineNumber + " of "
                            + sourceID);
                }

                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    super.onProgressChanged(view, newProgress);

                    long rxBytes = TrafficStats.getTotalRxBytes() - mStartRX;
                    long txBytes = TrafficStats.getTotalTxBytes() - mStartTX;

                    Log.d("TRAFFIC", "Current Bytes Rx ==>   " + rxBytes
                            + "   Bytes Tx ==>   " + txBytes
                            + " New progress ==> "  + newProgress);
                }
    });
   wv.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            pb.setVisibility(View.VISIBLE);

        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            wv.loadUrl(url);
            return true;
        }


        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);

        }
    });
z3yyvxxp

z3yyvxxp5#

我在我的测试设备上也遇到了同样的问题。除了这个WebView,其他地方都能正常工作。
这个测试设备是一个没有Chrome或者其他任何浏览器的POS终端,我认为问题与此有关。
在我的设备上工作的解决方案:
转到设置-〉开发者选项-〉禁用多进程WebView
在此WebView工作之后。

相关问题