集成
在Android Studio的Android工程中,需要在build.gradle文件内容里添加依赖指令,然后gradle构建就会自动化集成J2V8引擎
dependencies {
implementation 'com.eclipsesource.j2v8:j2v8:5.0.103@aar'
}
使用示例
示例摘自https://eclipsesource.com/blogs/tutorials/getting-started-with-j2v8/
import com.eclipsesource.v8.V8;
public static void main(String[] args) {
V8 runtime = V8.createV8Runtime();
int result = runtime.executeIntegerScript(""
+ "var hello = 'hello, ';\n"
+ "var world = 'world!';\n"
+ "hello.concat(world).length;\n");
System.out.println(result);
runtime.release();
}
访问JavaScript对象(Object)
假设有这样一段JS脚本
var jsobj = {};
jsobj.hello = "world";
在J2V8中可以直接访问jsobj对象
import com.eclipsesource.v8.V8;
public static void main(String[] args) {
V8 runtime = V8.createV8Runtime();
runtime.executeVoidScript(""
+ "var jsobj = {};\n"
+ "jsobj.hello = 'world';\n");
// 访问jsobj的属性
V8Object jsobj = runtime.getObject("jsobj");
System.out.println(jsobj.getString("hello"));
jsobj.release();
runtime.release();
}
需要注意,V8Object需要自己手动释放
执行JavaScript函数
JS脚本
function test(a,b){
return a+b;
}
var jsobj = {};
jsobj.func = test;
Java代码
V8 runtime = V8.createV8Runtime();
runtime.executeVoidScript("上面js脚本")
//包装参数
V8Array parameters = new V8Array(1).push(2);
//调用js test方法
runtime.executeIntegerFunction("test",parameters);
//调用jsobj.func
V8Object jsobj = runtime.getObject("jsobj");
jsob.executeIntegerFunction("func",parameters);
//释放
parameters.release();
jsobj.release();
runtime.release();
JS调用Java方法
需要注册实现了JavaCallback接口的对象
JavaVoidCallback callback = new JavaVoidCallback() {
@Override
public void invoke(final V8Object receiver, final V8Array parameters) {
System.out.println("xxxx");
}
}
V8 runtime = V8.createV8Runtime();
// 注册到 js 全局函数,函数名为 JavaFunc
runtime.registerJavaMethod(callback, "JavaFunc");
在js中使用
JavaFunc(1,2,3);
JS调用Java对象实例方法
使用
V8Object.registerJavaMethod(object, javaMedthod, jsMethod, paramlist);
object java对象
javaMedthod object上的方法名
jsMethod js环境中的方法名
paramlist 这里指参数类型列表V8 runtime = V8.createV8Runtime();
Object test = new test();
V8Object v8test = new V8Object(runtime);
runtime.add("test", v8test);
v8test.registerJavaMethod(test, "nativeFunc", "jsFunc", new Class>[] { String.class });
在js中使用
test.jsFunc('hello, world');