最近寫了一個webview用來加載HTML, 需求是在HTML中有一個分享按鈕, 點擊按鈕以後調用友盟的微信分享,javascript
由於分享功能是集成在Android項目中, 因此就須要用到Android和js交互, 因而就使用了:java
wv.addJavascriptInterface(this, "android_share"); android
的回調方式與自定義的 web
@JavascriptInterface安全
public void share() {微信
wv.post(new Runnable() {ide
@Overridepost
public void run() {測試
// 微信分享this
}
});
}
應用在未打包時能夠看到點擊按鈕是會執行分享方法的, 只不過會執行失敗, 這是由於友盟的微信分享必需要打包以後才能順利分享
因而就準備打包測試, 可是當打包應用以後再點擊按鈕就沒有任何反應了, 因此考慮應該不是代碼的問題 但也不知道問題出在哪裏
而後就開始在網上找相關資料, 大多數都是說的一個基本配置:
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 *;
}
而後在打包測試, 最終問題解決