集成
在Android Studio的Android工程中,需要在build.gradle文件内容里添加依赖指令,然后gradle构建就会自动化集成J2V8引擎
dependencies {
    implementation 'com.eclipsesource.j2v8:j2v8:5.0.103@aar'
}J2V8的最新版本,可以在marven仓库中查看
https://mvnrepository.com/artifact/com.eclipsesource.j2v8/j2v8
使用示例
示例摘自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 全局函数,函数名为 <code>JavaFunc</code>
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');
发表回复
要发表评论,您必须先登录。