Android 下的 QuickJS Binding 库特性使用详解
作者:汪海游龙 时间:2022-08-08 00:24:24
GitHub 地址:quickjs-android-wrapper
特性
支持 Java 和 JavaScript 类型互转
支持 Promise 异步执行
支持字节码编译和执行
支持模块加载执行
内置
console.log
实现统一的 JavaScript 异常处理
依赖
repositories {
mavenCentral()
}
dependencies {
implementation 'wang.harlon.quickjs:wrapper:0.0.18'
}
使用
创建 JSContext
QuickJSContext context = QuickJSContext.create();
执行 JavaScript
QuickJSContext context = QuickJSContext.create();
context.evaluate("var a = 1 + 2;");
支持的 Java 类型
以下的 Java 类型可以直接转换到 JavaScript 中使用:
boolean
int
double
String
null
JSObject
代表一个 JavaScript 对象
JSFunction
代表一个 JavaScript 方法
JSArray
代表一个 JavaScript 数组
属性设置
Java
JSObject globalObj = context.getGlobalObject();
JSObject obj1 = context.createNewJSObject();
obj1.setProperty("stringProperty", "hello");
obj1.setProperty("intProperty", 1);
obj1.setProperty("doubleProperty", 0.1);
obj1.setProperty("booleanProperty", true);
obj1.setProperty("functionProperty", (JSCallFunction) args -> {
return args[0] + "Wang";
});
globalObj.setProperty("obj1", obj1);
JavaScript
obj1.stringProperty; // hello string
obj1.intProperty; // 1
obj1.doubleProperty; // 0.1
obj1.booleanProperty; // true
obj1.functionProperty('Harlon'); // HarlonWang
属性获取
JavaScript
var obj1 = {
stringProperty: 'hello string',
intProperety: 1,
doubleProperty: 0.1,
booleanProperty: true,
functionProperty: (name) => { return name + 'Wang'; }
}
Java
JSObject globalObject = context.getGlobalObject();
JSObject obj1 = globalObject.getJSObjectProperty("obj1");
obj1.getProperty("stringProperty"); // hello
obj1.getProperty("intProperty"); // 1
obj1.getProperty("doubleProperty"); // 0.1
obj1.getProperty("booleanProperty"); // true
obj1.getJSFunctionProperty("functionProperty").call("Harlon"); // HarlonWang
编译和执行字节码
byte[] code = context.compile("'hello, world!'.toUpperCase();");
context.execute(code);
ESModule 模块加载和执行
Java
JSModule.setModuleLoader(new JSModule.Loader() {
@Override
public String getModuleScript(String moduleName) {
return "export var name = 'Hello world';\n" +
"export var age = 18;";
}
});
JavaScript
import {name, age} from './a.js';
console.log('name:' + name); // Jack
console.log('age:' + age); // 18
同步
所有的 JavaScript 代码执行都是单线程,基于创建时的线程决定,不支持多线程执行。
参考
quickjs-java
quack
quickjs-android
来源:https://juejin.cn/post/7071185530020429860
标签:Android,QuickJS,Binding,库
0
投稿
猜你喜欢
JDK8 中Arrays.sort() 排序方法详解
2023-01-17 10:38:30
详解Java编程中protected修饰符与static修饰符的作用
2022-05-11 03:53:17
C# 复制与删除文件的实现方法
2022-01-23 02:36:06
java 读取excel文件转换成json格式的实例代码
2023-09-11 13:07:28
详解Android Lint的原理及其使用
2022-12-23 16:05:47
Android中BroadcastReceiver(异步接收广播Intent)的使用
2022-12-24 20:51:17
Android中使用GridView进行应用程序UI布局的教程
2022-03-19 15:18:06
C#基于socket模拟http请求的方法
2022-09-12 09:55:11
MyBatis环境资源配置实现代码详解
2023-08-05 08:59:02
Android利用传感器仿微信摇一摇功能
2022-09-10 18:18:18
WPF如何自定义TabControl控件样式示例详解
2021-09-22 07:27:34
详解java开发webservice的几种方式
2023-03-13 04:31:33
Android 高德地图之poi搜索功能的实现代码
2022-03-07 01:36:52
关于Flyweight模式应用实践的相关介绍
2021-07-28 21:50:34
Java学习之线程同步与线程间通信详解
2022-05-27 08:03:59
C#开发Winform实现文件操作案例
2022-04-28 15:30:53
Android compose气泡升起和水滴下坠动画实现示例
2023-04-09 01:52:22
日常收集C#接口知识(知识全面)
2022-09-01 19:02:44
Java并发框架:Executor API详解
2021-10-31 14:30:28
Java任意长度byte数组转换为int数组的方法
2023-02-15 15:26:32