我正面临一个严重的 android OS Jelly Bean 4.2 错误,在我的程序中,我使用 JavaScript 来获取网页的高度,它在 android 2.2 到 4.1 中完美运行,但是当我尝试在 android 4.2 中使用相同的代码时JavaScript 界面不工作。
我该如何解决这个问题?
我正面临一个严重的 android OS Jelly Bean 4.2 错误,在我的程序中,我使用 JavaScript 来获取网页的高度,它在 android 2.2 到 4.1 中完美运行,但是当我尝试在 android 4.2 中使用相同的代码时JavaScript 界面不工作。
我该如何解决这个问题?
来自 Android 4.2 文档:
注意:如果您将 targetSdkVersion 设置为 17 或更高,则必须将 @JavascriptInterface 注释添加到您希望网页代码可用的任何方法(该方法也必须是公共的)。如果您不提供注释,则在 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*
注意:您的 MyJavaScriptInterface 必须是 Public 类
根据文档:Android doc 从 Android 4.2 开始,您必须使用 @JavascriptInterface 注释您的方法(并且您的方法必须是公开的)。
适用于我的目标 API 17+ 的 Proguard 配置:
-keep @interface android.webkit.JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}