4.4以下混淆出错
Closed this issue · 7 comments
Hello,虎扑JR,我在使用 https://github.com/jesse01/WebViewJavascriptBridge
抱歉不是你的项目,但我发现你们两个项目差不多,所以前来咨询一下。
如果不进行混淆,是运行没有问题,但我一混淆,4.4以上的系统没问题,4.4以下的就无法调用
主要代码
`
public void executeJavascript(final String script, final JavascriptCallback callback)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(script, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
if (callback != null) {
if (value != null && value.startsWith("\"")
&& value.endsWith("\"")) {
value = value.substring(1, value.length() - 1)
.replaceAll("\\\\", "");
}
callback.onReceiveValue(value);
}
}
});
} else {
if (callback != null) {
myInterface.addCallback(++uniqueId + "", callback);
mHandler.post(new Runnable() {
@Override
public void run() {
if(webView!=null){
webView.loadUrl("javascript:window." + kInterface
+ ".onResultForScript(" + uniqueId + "," + script + ")");
}
}
});
} else {
mHandler.post(new Runnable() {
@Override
public void run() {
if (webView == null)
return;
webView.loadUrl("javascript:" + script);
}
});
}
}
}
`
我在proguard中添加了
-keep class xxx.xxx.xxx.WVJBWebViewClient{;}
-keep class xxx.xxx.xxx.WebViewActivity{;}
WVJBWebViewClient 的子类是直接写在 WebViewActivity 中的
但混淆出来还是不行,希望你有时间能关注一下
-keepclassmembers class xxx.xxx.WebViewActivity$onResultForScript {
public *;
}
应该是这样
@gzsll 感谢提醒,可能是我keep规则写的不对?加了没效果,在seeds中也找不到 MyJavascriptInterface .
最后我索性直接把 MyJavascriptInterface 和 WVJBMessage 择出来,放到bean目录下,以防被混淆,it works!
-keepclassmembers class * {
@android.webkit.JavascriptInterface ;
}
-keepattributes Annotation
-keepattributes JavascriptInterface
上面的还要加上
写错,应该是~
-keepclassmembers class xxx.xxx.WebViewActivity$MyJavascriptInterface {
public *;
}