我遇到了一个严重的问题,这个问题与安卓操作系统Jelly Bean 4.2有关。在我的程序中,我使用JavaScript来获取网页的高度,在安卓2.2到4.1版本中它能够正常工作,但是当我在安卓4.2中尝试使用相同的代码时,JavaScript接口就无法工作了。
请问我该如何解决这个问题?
我遇到了一个严重的问题,这个问题与安卓操作系统Jelly Bean 4.2有关。在我的程序中,我使用JavaScript来获取网页的高度,在安卓2.2到4.1版本中它能够正常工作,但是当我在安卓4.2中尝试使用相同的代码时,JavaScript接口就无法工作了。
请问我该如何解决这个问题?
根据 Android 4.2 文档:
注意: 如果您将 targetSdkVersion 设置为 17 或更高版本,则必须为任何想在您的网页代码中使用的方法添加 @JavascriptInterface 注释 (该方法还必须是 public 的). 如果您不提供注释,则在 Android 4.2 或更高版本上运行时,该方法将不可被您的网页访问.
如果您正在使用Proguard,请记得添加以下内容:
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepattributes JavascriptInterface
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
-keepattributes *Annotation*
以下是适用于目标API 17+的Proguard配置,经过我的测试可以正常使用:
-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}