Android 应用打包之后webview中的js交互方法失效

最近写了一个webview用来加载HTML, 需求是在HTML中有一个分享按钮, 点击按钮之后调用友盟的微信分享,

因为分享功能是集成在Android项目中, 所以就需要用到Android和js交互,  于是就使用了:

wv.addJavascriptInterface(this, "android_share");  

的回调方式与自定义的   

@JavascriptInterface

public void share() {

  wv.post(new Runnable() {

@Override

public void run() {

// 微信分享

}

});

}

 

应用在未打包时可以看到点击按钮是会执行分享方法的, 只不过会执行失败, 这是因为友盟的微信分享必须要打包之后才能顺利分享

于是就准备打包测试, 但是当打包应用之后再点击按钮就没有任何反应了, 所以考虑应该不是代码的问题 但也不知道问题出在哪里

然后就开始在网上找相关资料, 大多数都是说的一个基本配置:

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

}

然后在打包测试, 最终问题解决

 

转载于:https://www.cnblogs.com/xys-lq/p/9553352.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值