编程技术记录

世界你好!

集成

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

发表回复

© Beli. All Rights Reserved.