java 调用 v8_学习笔记:使用Android V8 (J2V8)JavaScript引擎
集成
在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引擎相关推荐
- 学习笔记之Android调用系统相册选择图片
文章目录 前言 使用步骤 小结 参考资料 前言 在相册里选择图片上传也是很常见的功能了例如微信朋友圈等等.但是他们是自定义的选择器,可以选择多张图片并修改.这里我们讲一个最简单的:调用系统的相册选择一 ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- java.util.List学习笔记
概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...
- Java快速入门学习笔记9 | Java语言中的方法
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java 8 实战学习笔记
Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...
- Java编程思想学习笔记-第11章
<?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...
- 《疯狂Java讲义》学习笔记 第六章 面向对象(下)
<疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...
- Java基础篇 学习笔记
List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...
- 01.Java 编程入门学习笔记20210307
Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...
最新文章
- springboot---成员初始化顺序
- .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置
- java将数组中的数据修改,深度集成!
- [Github项目推荐] 推荐三个助你更好利用Github的工具
- 飞鸽传书整个逻辑盲写,不做测试
- Java基础:List集合和Set接口
- 代码生成的思考:MyMeta提供数据库架构,反射、Emit提供构建的提供动态创建的环境...
- Verilog初学者小圣经
- win10无法装载iso文件_win10系统iso文件怎么安装
- 计算机组成原理 累加器实验
- 打印系统开发(27)——WinForm开发(49)——c# winform 打印图像,PrintDialog打印并且设置打印纸张大小
- Linux下启动oracle_无名小仙男
- vscode ssh远程输入密码之后无反应,一直提示输入密码
- expected START_TAG or END_TAG not TEXT (position: TEXT seen ...</mirror> -->\r\n
- 寻求激光雕刻机软件开发合作。有意者请联系
- 福州大学特大游戏制作团伙-冲刺日志(第9天11.23)
- python抓取网页数据并截图_网络爬虫-使用Python抓取网页数据
- 关闭当前layer弹出层,点按钮再弹出一个layer弹出层
- Joomla模板下载
- 代码修炼Day1_LeetCode704二分查找27移除元素