我正在尝试在WebView中使用WebView.evaluateJavascript()但是只要我使用Proguard进行混淆,它就不再有效。
我有一些示例代码来说明我在做什么,在我创建WebView的服务中。我附加了一个记录所有警报的自定义WebChromeClient:
public class MyWebChromeClient extends WebChromeClient
{
final private static String TAG = MyWebChromeClient.class.getSimpleName();
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.v(TAG, message);
result.confirm();
return true;
}
}
然后我附上这个WebChromeClient
this.webView = new WebView(context)
this.webView.setWillNotDraw(true);
this.webView.setWebViewClient(new WebViewClient());
this.webView.setWebChromeClient(new MyWebChromeClient());
this.webView.loadUrl("");
this.webView.evaluateJavascript("alert('test')", new ValueCallback<String>()
{
@Override
@JavascriptInterface
public void onReceiveValue(String s)
{
Log.v("JSEvaluation", s.toString());
}
});
虽然当我使用proguard进行调试时这可以正常工作,但如果没有调试和proguard,它将无法正常工作。知道是什么导致了这个吗?
我认为我的proguard文件是正确的:
-keepattributes *Annotation*
-keepattributes JavascriptInterface
-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
-keep class my.class.package.** { *; }
正如您所看到的,执行此操作的类根本不会被混淆。是否需要任何规则才能使WebView正常工作?