赞
踩
背景
这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文。
解决方案
1、确定调用了webView.addJavascriptInterface()方法并且webView支持js
webView支持js是前提,设置方法:webView.getSettings().setJavascriptEnabled(true)
webView.addJavascriptInterface(object, string)方法用来给webview的网页绑定安卓端的对象。object就是安卓端的对象,string是这个对象在前端的名字
2、确定要调用的方法加了@JavascriptInterface注解,而且访问修饰符是public
如果js要调安卓端的某个方法,必须在安卓端的这个方法前加上@JavascriptInterface注解,而且,如果targetSdkVersion >= 17的话,还要加上@SuppressLint("JavascriptInterface")注解,而且要保证这些方法是公有的
3、考虑代码混淆
如果项目用了代码混淆,则要在项目的proguard-project.txt文件里声明下面几句话,保证混淆时@JavascriptInterface注解不被去掉
-keepattributes *JavascriptInterface*
-keep class com.example.szc.TextSelectionHelper
-keep class com.example.szc.TextSelectionHelper {public *;}
第一行表示保留JavascriptInterface注解
第二行是保持TextSelectionHelper类,因为我是在这个类里使用JavascriptInterface注解的
第三行表示保持这个类里所有公有字段,因为使用JavascriptInterface注解的方法只有是公有的,才有效
结语
解决思路就如上所示,我是通过第三步解决的,坑了一天才完事。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。