集成

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

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

  1. 学习笔记之Android调用系统相册选择图片

    文章目录 前言 使用步骤 小结 参考资料 前言 在相册里选择图片上传也是很常见的功能了例如微信朋友圈等等.但是他们是自定义的选择器,可以选择多张图片并修改.这里我们讲一个最简单的:调用系统的相册选择一 ...

  2. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  3. java.util.List学习笔记

    概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...

  4. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java 8 实战学习笔记

    Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...

  6. Java编程思想学习笔记-第11章

    <?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...

  7. 《疯狂Java讲义》学习笔记 第六章 面向对象(下)

    <疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...

  8. Java基础篇 学习笔记

    List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...

  9. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

最新文章

  1. springboot---成员初始化顺序
  2. .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置
  3. java将数组中的数据修改,深度集成!
  4. [Github项目推荐] 推荐三个助你更好利用Github的工具
  5. 飞鸽传书整个逻辑盲写,不做测试
  6. Java基础:List集合和Set接口
  7. 代码生成的思考:MyMeta提供数据库架构,反射、Emit提供构建的提供动态创建的环境...
  8. Verilog初学者小圣经
  9. win10无法装载iso文件_win10系统iso文件怎么安装
  10. 计算机组成原理 累加器实验
  11. 打印系统开发(27)——WinForm开发(49)——c# winform 打印图像,PrintDialog打印并且设置打印纸张大小
  12. Linux下启动oracle_无名小仙男
  13. vscode ssh远程输入密码之后无反应,一直提示输入密码
  14. expected START_TAG or END_TAG not TEXT (position: TEXT seen ...</mirror> -->\r\n
  15. 寻求激光雕刻机软件开发合作。有意者请联系
  16. 福州大学特大游戏制作团伙-冲刺日志(第9天11.23)
  17. python抓取网页数据并截图_网络爬虫-使用Python抓取网页数据
  18. 关闭当前layer弹出层,点按钮再弹出一个layer弹出层
  19. Joomla模板下载
  20. 代码修炼Day1_LeetCode704二分查找27移除元素

热门文章

  1. 自律到极致-人生才精致:第10期
  2. 滑动窗口的最大值java
  3. torch same padding
  4. DetNAS ThunderNet
  5. python 比较文件夹或列表异同
  6. libreadline.so.6: undefined symbol
  7. python 调用c++ 回调函数
  8. python多条件排序
  9. ubuntu查看文件和文件夹大小
  10. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决