最近写了一个webview用来加载HTML, 需求是在HTML中有一个分享按钮, 点击按钮以后调用友盟的微信分享,javascript
由于分享功能是集成在Android项目中, 因此就须要用到Android和js交互, 因而就使用了:java
wv.addJavascriptInterface(this, "android_share"); android
的回调方式与自定义的 web
@JavascriptInterface安全
public void share() {微信
wv.post(new Runnable() {ide
@Overridepost
public void run() {测试
// 微信分享this
}
});
}
应用在未打包时能够看到点击按钮是会执行分享方法的, 只不过会执行失败, 这是由于友盟的微信分享必需要打包以后才能顺利分享
因而就准备打包测试, 可是当打包应用以后再点击按钮就没有任何反应了, 因此考虑应该不是代码的问题 但也不知道问题出在哪里
而后就开始在网上找相关资料, 大多数都是说的一个基本配置:
wv.getSettings().setJavaScriptEnabled(true);
然而这并不能解决个人问题, 由于我已经配置过了, 因而继续找, 找了很久终于找到一个靠谱的帖子:
https://blog.csdn.net/chenjiang2936/article/details/79346778
其实缘由就在于我以前提到的打包, 相信大多数项目在上线以前都会作混淆, 由于混淆会提升一点项目的安全性但同时也会产生一些使人头疼的问题
在混淆配置文件中有一段描述以下:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
就是说若是项目中有用到webview而且使用了js交互 就须要取消下面的注释并指定你的类的全名, 实际操做以下:
把上面描述中的最下面3行注释解除, 并把 fqcn.of.javascript.interface.for.webview 换成你的类的全名, 而后在加上配置:
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
最后效果就是:
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
-keepclassmembers class 你的类的全名 {
public *;
}
而后在打包测试, 最终问题解决