目录
错误场景:
项目程序运行正常,但是生成APK之后在App里面有嵌入H5页面,页面里面的点击事件不响应,也就是H5里面的JavaScript与本地Java代码交互的时候调用失败。
分析原因:
导出apk和开发工具直接安装的时候,有区别的地方在于应用签名不同,还有导包的时候做了混淆。签名不会对JavaScript与Java代码调用有影响(注意签名对支付和分享等功能有影响),在这里出问题很可能是混淆造成的。
代码混淆之后,方法名发生变化,就会出现调用失败的问题。
解决方案:
代码中使用了webview和js交互时,混淆文件中应该添上如下配置:
-keepclassmembers class com.xx$AndroidtoJs {
public *;
}
-keep public class com.xx$AndroidtoJs{
public void *(java.lang.String);
}
其中AndroidtoJs是内部类,前面是它的包名位置
调用js接口时,需要在方法使用时声明@JavascriptInterface
// 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface
public void hello(String msg) {
Log.d("msg", "->>JS调用了Android的hello方法:" + msg);
}
保留跟 javascript相关的属性
-keepattributes Annotation
-keepattributes JavascriptInterface