JELLY_BEAN及以下的JavascriptInterface注释

时间:2013-05-05 00:56:14

标签: java android

正如official docs中明确指出的那样,API级别JELLY_BEAN_MR1及以上版本需要使用@JavascriptInterface,以便从Webview端访问java函数。

这意味着Project Build Target必须指向解决以下导入的API 17或更高版本:

import android.webkit.JavascriptInterface;

android如何为API 16及以下版本处理此代码?我是否会获得运行时异常,还是在运行时忽略此导入?

3 个答案:

答案 0 :(得分:5)

我对这些答案感到非常惊讶......它们并不准确。 如果你添加JavascriptInterface和另一个注释让我们说 MyAnnotation 到同一个方法(就像我做的那样),然后尝试访问 MyAnnotation 实例注释,那么你就是ClassDefNotFoundException意外!

我的解决方案似乎现在有效(已经超过一年了),是将注释声明添加到应用程序项目中:

package android.webkit;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface JavascriptInterface {}

这解决了2.3.5的问题,仍然在4.3和4.4和4.2上工作。

希望这有助于其他人!

答案 1 :(得分:4)

较旧的Android版本未加载注释类JavascriptInterface,因此您的代码将在旧版本上运行时没有任何问题。

答案 2 :(得分:0)

您建议的import android.webkit.JavascriptInterface;之类的导入只是对编译器的提示,因此它可以解析您在源代码中进一步引用的完整类路径。当您尝试使用该类时,VM只会抛出ClassNotFoundException。所以简单的答案是否定的,只要您保护JavascriptInterface使用以下内容,一切都会好的。

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        JavascriptInterface js = new JavascriptInterface(){ ... };
    }