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{*;}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容