Android上的JavascriptInterface在发布模式下无法使用APK

时间:2013-12-12 17:08:00

标签: javascript android webview

我有一个问题,即两天前我正在寻找解决方案。在搜索令人沮丧之后,我将在此发布:

我创建了一个具有webview的示例应用程序,这个webview打开了一个url,其中包含一个调用android函数的链接。我遵循它: http://developer.android.com/guide/webapps/webview.html#BindingJavaScript

我正在使用最新的AndroidStudio版本,并使用galaxy s4 mini进行测试。

当我调试它时,一切正常并且显示了祝酒词。

问题是当我使用命令生成RELEASE应用程序时: 〜/ Server / gradle-1.8 / bin / gradle assembleRelease

应用程序打开,但是当我触摸调用我的本机函数的链接时,它不起作用,什么也没发生。但是使用调试模式,它可以工作。

任何人都可以帮助我吗?

要更好地理解的图片:

enter image description here

2 个答案:

答案 0 :(得分:5)

如果Gradle配置为使用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

答案 1 :(得分:2)

在AndroidStudio 0.8.4中,它会在创建新的应用程序项目时在应用程序模块的根目录下创建一个名为proguard-rules.pro的文件。它包含以下消息(这是解决方案):

# 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 *;
}