安卓開發學習之解決JS不能呼叫Android方法
阿新 • • 發佈:2018-12-26
背景
這兩天在做劃詞搜尋時,需要讓前端的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註解的方法只有是公有的,才有效
結語
解決思路就如上所示,我是通過第三步解決的,坑了一天才完事。