2013-12-12 60 views
4

我有一個問題,即時通訊搜索解決方案,因爲兩天前。沮喪的搜索後,我會張貼在這裏:Android上的JavascriptInterface不能在發佈模式下使用APK

我已經創建了一個示例應用程序,有一個web視圖,這個web視圖打開一個網址,有一個鏈接來調用一個android功能。我遵循它: http://developer.android.com/guide/webapps/webview.html#BindingJavaScript

即時通訊使用最後的AndroidStudio版本和即時通訊使用銀河s4迷你測試。

當我調試它,一切正常,吐司顯示。

問題是,當我生成命令發佈應用程序: 〜/服務器/ gradle這個-1.8 /斌/ gradle這個assembleRelease

的應用程序中打開,但是當我碰那個叫我的本地函數的鏈接,它不工作,沒有發生。但是在調試模式下,它可以工作。

任何人都可以幫助我嗎?

的圖像更好地理解:

enter image description here

+0

嗨@Nachi你是最棒的!問題已經解決了。謝謝。你拯救了我的生命。上帝祝福你! –

回答

5

如果搖籃配置爲使用ProGuard的,在@JavascriptInterface註釋需要明確保留。

-keep public class com.mypackage.MyClass$MyJavaScriptInterface 
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface 
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { 
    <methods>; 
} 
-keepattributes JavascriptInterface 

有關詳細信息,請參閱here

2

在AndroidStudio 0.8.4上,創建一個名爲proguard-rules.pro的文件,在創建一個新的App項目時在應用程序模塊的根目錄下。它包含以下消息(這是解決方案):

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in D:\Android\android-sdk/tools/proguard/proguard-android.txt 
# You can edit the include path and order by changing the proguardFiles 
# directive in build.gradle. 
# 
# For more details, see 
# http://developer.android.com/guide/developing/tools/proguard.html 

# Add any project specific keep options here: 

# If your project uses WebView with JS, uncomment the following 
# and specify the fully qualified class name to the JavaScript interface 
# class: 
-keepclassmembers class com.package.YourWebViewJavaInterfaceClasse { 
    public *; 
} 
相關問題