正如official docs中明确指出的那样,API级别JELLY_BEAN_MR1及以上版本需要使用@JavascriptInterface,以便从Webview端访问java函数。
这意味着Project Build Target必须指向解决以下导入的API 17或更高版本:
import android.webkit.JavascriptInterface;
android如何为API 16及以下版本处理此代码?我是否会获得运行时异常,还是在运行时忽略此导入?
答案 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(){ ... };
}