android Webview addJavascriptInterface失效修复记录

昨天项目联调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{*;}

你可能感兴趣的:(android Webview addJavascriptInterface失效修复记录)