安卓开发学习之解决JS不能调用Android方法

背景

这两天在做划词搜索时,需要让前端的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注解的方法只有是公有的,才有效

 

结语

解决思路就如上所示,我是通过第三步解决的,坑了一天才完事。

你可能感兴趣的