AFAIK没有现成的解决方案
JSV8
.
但看看下面的例子:
public class V8ConsoleBridge implements JavaVoidCallback {
@Override
public void invoke(V8Object receiver, V8Array parameters) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parameters.length(); ++i) {
if (i > 0) {
sb.append(", ");
}
Object object = parameters.get(i);
if (object instanceof V8Object) {
V8Object v8Object = (V8Object) object;
sb.append(v8Object.toString());
v8Object.release();
} else {
sb.append(object);
}
}
Log.i("goebl-v8", sb.toString());
}
public static void register(V8 v8) {
V8ConsoleBridge console = new V8ConsoleBridge();
V8Object v8Console = new V8Object(v8);
v8.add("console", v8Console);
v8Console.registerJavaMethod(console, "debug");
v8Console.registerJavaMethod(console, "log");
v8Console.registerJavaMethod(console, "info");
v8Console.registerJavaMethod(console, "warn");
v8Console.registerJavaMethod(console, "error");
v8Console.release();
}
}
这是用于JS的硬编码桥梁
console
对象访问Android日志记录系统。
您可以将泛型代码写入
-
扫描想要在JavaScript中公开的类,非常类似于WebView的JavaScript接口,即使有如下注释
@JavascriptInterface
只包括某些成员
-
为编写通用代码
invoke
它实际上通过使用Java反射来调用receiver类的成员。
当然,如果J2V8有这段有用的代码就好了,因为它可能被许多项目使用。如果您有一个可靠的解决方案,请创建一个拉取请求,以便我也可以使用它:-)
如果您不介意深入研究源代码,您可能会发现查看它很有用
NativeScript
它们提供了一种通用的方法来访问JavaScript中编译时已知的所有Java类,这是通过反射在内部完成的。嗯,我听说他们是这样做的,实际上我没有读NativeScript的源代码。在NativeScript中,您不必创建桥,它是由构建和运行时系统神奇地完成的。也许源代码启发您将这些想法移植到J2V8。