WebView.evaluateJavascript()无法正常工作

时间:2016-09-21 20:04:10

标签: android webview proguard obfuscation

我正在尝试在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正常工作?

0 个答案:

没有答案