Webview crash on Android

When I try creating a WebView within my app, running it on Android, I see the crash report below. Can anyone suggest how to fix it?

WebSocket was deprecated please use cc.WebSocket instead.
09-23 17:16:18.029 2455-2455/? E/WebContentsProviderReceiver: onReceive - not approved application
09-23 17:16:18.655 2455-2455/? E/WebContentsProviderReceiver: onReceive - not approved application
09-23 17:16:19.321 2455-2455/? E/WebContentsProviderReceiver: onReceive - not approved application
09-23 17:16:57.873 5239-5239/com.laserpoint.itob I/WebViewFactory: Loading com.android.chrome version 69.0.3497.100 (code 349710052)
09-23 17:16:58.005 5239-5239/com.laserpoint.itob I/art: Rejecting re-init on previously-failed class java.lang.Class<uJ>: 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:2325)
        at void android.webkit.WebView.ensureProviderCreated() (WebView.java:2320)
09-23 17:16:58.006 5239-5239/com.laserpoint.itob I/art:     at void android.webkit.WebView.setOverScrollMode(int) (WebView.java:2379)
        at void android.view.View.<init>(android.content.Context) (View.java:4317)
        at void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int) (View.java:4454)
        at void android.view.ViewGroup.<init>(android.content.Context, android.util.AttributeSet, int, int) (ViewGroup.java:579)
        at void android.widget.AbsoluteLayout.<init>(android.content.Context, android.util.AttributeSet, int, int) (AbsoluteLayout.java:55)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:627)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
        at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
        at void org.cocos2dx.lib.Cocos2dxWebView.<init>(android.content.Context, int) (Cocos2dxWebView.java:72)
        at void org.cocos2dx.lib.Cocos2dxWebViewHelper$1.run() (Cocos2dxWebViewHelper.java:92)
        at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:751)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
        at void android.os.Looper.loop() (Looper.java:154)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682)
        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:1520)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410)
    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]]
        at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
        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:2325)
        at void android.webkit.WebView.ensureProviderCreated() (WebView.java:2320)
        at void android.webkit.WebView.setOverScrollMode(int) (WebView.java:2379)
        at void android.view.View.<init>(android.content.Context) (View.java:4317)
        at void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int) (View.java:4454)
        at void android.view.ViewGroup.<init>(android.content.Context, android.util.AttributeSet, int, int) (ViewGroup.java:579)
        at void android.widget.AbsoluteLayout.<init>(android.content.Context, android.util.AttributeSet, int, int) (AbsoluteLayout.java:55)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:627)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:572)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:555)
        at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:542)
        at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:532)
        at void org.cocos2dx.lib.Cocos2dxWebView.<init>(android.content.Context, int) (Cocos2dxWebView.java:72)
        at void org.cocos2dx.lib.Cocos2dxWebViewHelper$1.run() (Cocos2dxWebViewHelper.java:92)
        at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:751)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:95)
        at void android.os.Looper.loop() (Looper.java:154)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6682)
        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:1520)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1410)
09-23 17:16:58.081 5239-5628/com.laserpoint.itob E/cr_VariationsUtils: Failed reading seed file "/data/user/0/com.laserpoint.itob/app_webview/variations_seed_new": /data/user/0/com.laserpoint.itob/app_webview/variations_seed_new (No such file or directory)
09-23 17:16:58.082 5239-5628/com.laserpoint.itob E/cr_VariationsUtils: Failed reading seed file "/data/user/0/com.laserpoint.itob/app_webview/variations_seed": /data/user/0/com.laserpoint.itob/app_webview/variations_seed (No such file or directory)
09-23 17:16:58.116 3637-5313/? I/ActivityManager: Start proc 5629:com.android.chrome:webview_service/u0a91 for service com.android.chrome/org.chromium.android_webview.services.VariationsSeedServer
09-23 17:16:58.123 5629-5629/? I/SELinux: SELinux: seapp_context_lookup: seinfo=chrome, level=s0:c512,c768, pkgname=com.android.chrome:webview_service 
09-23 17:16:58.717 5239-5671/com.laserpoint.itob W/cr_CrashFileManager: /data/user/0/com.laserpoint.itob/cache/WebView/Crash Reports does not exist or is not a directory

Can you tell more details like cocos2dx version, Android version etc? And code snippet.
We are using it without any issue.

Thanks for the reply

It’s Android 7.0 on a Galaxy S6

v3.17 of cocos2d-x

Fully updated Android Studio as of yesterday

Code:

if ccexp.WebView then
    ccexp.WebView:create():setPosition(display.center)
                          :setSize(cc.p(852.0, 524.0))
                          :loadUrl("http://www.glidos.net")
                          :addTo(self)
end

ohk, I am using c++ so will not be able to help you.

The use of lua shouldn’t be making any difference really. The lua just calls into the C++, after all.

Does the web view demo in cpp-tests work for you? There may be one in lua tests also.

Trying cpp-tests is clearly a good idea, so I thought I’d try it out. First - although probably a bad idea - I accepted some more Android Studio updates and tried out my own project again. Now my previously working app (even without the webview) produces a blank black screen and cpp-tests crashes. :roll_eyes:

Am I doing the wrong thing here with Android Studio updates? Should I update only when I take on a new version of cocos2d-x? And then only if I take it on shortly after its release?

This does seem to be a problem only for lua projects. The WebView test in cpp-tests does work. Also a cpp-based project I created works - with code:

Size winSize = Director::getInstance()->getVisibleSize();
auto webview = cocos2d::experimental::ui::WebView::create();
webview->setPosition(winSize/2);
webview->setContentSize(winSize * 0.5);
webview->loadURL("https://www.baidu.com");
webview->setScalesPageToFit(true);
this->addChild(webview);

but a lua project with the following code does not work:

ccexp.WebView:create():setPosition(display.center)
                      :setContentSize(cc.size(display.width/2, display.height/2))
                      :loadURL("https://www.baidu.com")
                      :setScalesPageToFit(true)
                      :addTo(self)

It does work. Apologies if I’ve wasted anyone’s time. I was confused by the reported failure in the logs and by the site taking a significant time to load.

I still need to discover why it isn’t working within my app, but that may well be a z ordering problem.

Thanks for the replies.

I hate admitting to this, but it may help someone else: webview wasn’t working in my app because I was constructing a value to pass to setContentSize using cc.p rather than using cc.size. :roll_eyes: