1. 程式人生 > >安卓開發學習之解決JS不能呼叫Android方法

安卓開發學習之解決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註解的方法只有是公有的,才有效

 

結語

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