Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could not find class 'android.webkit.WebResourceResponse' when running HelloCordova on Android 2.2

I tried to follow this tutorial: http://docs.phonegap.com/en/2.7.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android

and get the following error:

05-08 15:35:59.845: E/dalvikvm(307): Could not find class 'android.webkit.WebResourceResponse', referenced from method org.apache.cordova.CordovaWebViewClient.getWhitelistResponse

Here a guy explains the error: https://issues.apache.org/jira/browse/CB-3041

This is a known issue. Because Android 2.3 does not have android.webkit.WebResourceResponse, this code is considered dead by Android 2.3's Dalvik. This means your whitelisting doesn't work properly like it does on Android 4.x, as per CB-2099. I'm going to keep this open, but lower the priority, since we know what causes it and it's an easy "First Bug" for someone if they really want to fix this.

He tells the fix is easy, but does not explain how to fix it -.- Brilliant!

Obviously one fix is not to run it with an Android 2.2 emulator because it works with Android 4.2.

But how do I get it working in Android 2.2?

I want to build an application that is compatible from API Level 8 and up.

like image 514
steros Avatar asked May 08 '13 15:05

steros


1 Answers

This is because Android 2.2 does not have the updated webkit with WebResource Response.

Try downloading the cordova 2.2 jar from here and putting it in you /libs folder at the base of your project. If there is none, create one. You might also have to add IceCreamCordovaWebViewClient.java to your sources (or if you choose to download the source code of cordova and add it as a dependency, you can add it to that source)

Or you can try using a regular WebViewClient/ChromeClient and doing the work yourself, as MH outlines in this post, copied below.

If you want to do something similar for Android 2.x, you might want to try using the earlier mentioned shouldOverrideUrlLoading(WebView view, String url) to avoid loading the page, fetch it manually, replace the reference to the css file with your own, and finally call loadData(String data, String mimeType, String encoding) (or loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)) on the WebView, passing in the manipulated html content as a string.


EDIT:

Also, you can also try adding WebResourceResponse and dependencies to your src folder. Try downloading them from here

like image 179
dberm22 Avatar answered Nov 13 '22 10:11

dberm22