当前位置: 首页 > 工具软件 > J2V8 > 使用案例 >

java 调用 v8_学习笔记:使用Android V8 (J2V8)JavaScript引擎

张建树
2023-12-01

集成

在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');

 类似资料: