昨天项目联调h5页面内调起微信小程序,意外发现跑了很久的项目突然无法h5与原生交互,经过一个下午加转天一个上午的排查,终于找到原因:
webView.addJavascriptInterface(new JsInteration(), "pos");
调用没有问题;
private class JsInteration {
@JavascriptInterface
public void isinapp(String s) { }
@JavascriptInterface
public void login() {
LogUtil.e(TAG, "login-->" );
if(ctx instanceof MainActivityN)startActivity(new Intent(ctx, LoginActivity.class));
}
@JavascriptInterface
public void register() {
startActivity(new Intent(ctx, RegisterPhoneActivity.class));
}
}
对应调起方法也有加标签。
之前打过的apk调起没问题,说明外部h5运行正常。
经过反复clean、重启项目,排除了缓存问题。
最后排查到gradle文件,发现debug时做了代码混淆:
minifyEnabled true
改为false后,clean重新测试,确定原因:由于JsInteration 类为内部类,混淆文件中没有特殊处理,导致该类里的方法名被混淆,无法识别。具体为什么之前没事还没找到原因。
解决方案:
混淆文件中添加JsInteration 做排除:
-keep class com.test.common.base.WebViewFragment$JsInteration{*;}