quickjs-android 是 QuickJS JavaScript 引擎的 Andoroid 接口框架,实现了 Java 调用内核功能。armeabi-v7a 的大小仅 350KB,是 Google V8 的不错替代品,启动速度比 V8更快,几乎完美支持ES2020。
implementation 'io.github.taoweiji.quickjs:quickjs-android:1.1.2'
QuickJS quickJS = QuickJS.createRuntime();
JSContext context = quickJS.createContext();
int result = context.executeIntegerScript("var a = 2+10;\n a;", "file.js");
context.close();
quickJS.close();
运行环境,可以创建多个运行时环境,不同的环境之间不能共享对象
QuickJS quickJS = QuickJS.createRuntime();
由 QuickJS 创建,一个 QuickJS 可以创建多个 JSContext。
JSContext jsContext = quickJS.createContext();
所有的 JS 类型的基类,比如 int、double、object、array等。
object 对应的类型
JSObject object = new JSObject(jsContext);
object.set("name", "Wiki");
object.set("age", 18);
Log.e("QuickJS", String.valueOf(object.getString("name")));
Log.e("QuickJS", String.valueOf(object.getInteger("age")));
object 对应的类型
JSArray array = new JSArray(jsContext);
array.push(1);
array.push(3.14);
array.push(true);
array.push("Hello World");
Log.e("QuickJS", String.valueOf(arr.getInteger(0)));
Log.e("QuickJS", String.valueOf(arr.getDouble(1)));
Log.e("QuickJS", String.valueOf(arr.getBoolean(2)));
Log.e("QuickJS", String.valueOf(arr.getString(3)));
Log.e("QuickJS", String.valueOf(arr.length()));
方法 | 说明 |
---|---|
static QuickJS createRuntime() | 创建运行时 |
JSContext createContext() | 创建上下文 |
void close() | 销毁引擎 |
一切JS元素的基类
方法 | 说明 |
---|
继承JSValue
方法 | 说明 |
---|---|
set(key, value) | 设置属性 |
getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
registerJavaMethod(JavaCallback callback, String jsFunctionName) | 注册JS函数,调用函数会执行java的Callback,带有返回值 |
registerJavaMethod(JavaVoidCallback callback, String jsFunctionName) | 注册JS函数,调用函数会执行java的Callback,不带返回值 |
executeFunction | 一共提供了10个相关的方法,用于执行JS函数获取返回值 |
boolean contains(String key) | 判断是否包含属性 |
String[] getKeys() | 获取所有的属性名称 |
继承JSObject
方法 | 说明 |
---|---|
push(value) | 设置属性 |
getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
length() | 数组大小 |
继承JSObject
方法 | 说明 |
---|---|
push(value) | 设置属性 |
getInteger/getBoolean/getDouble/getString/getArray/getObject | 提供了6个获取方法 |
length() | 数组大小 |
继承JSObject,拥有JSObject全部方法,对象本身是全局对象
方法 | 说明 |
---|---|
void close() | 销毁上下文 |
int executeIntegerScript(String source, String fileName) | |
double executeDoubleScript(String source, String fileName) | |
String executeStringScript(String source, String fileName) | |
boolean executeBooleanScript(String source, String fileName) | |
Object executeScript(String source, String fileName) | |
void executeVoidScript(String source, String fileName) | |
JSArray executeArrayScript(String source, String fileName) | |
- 增加NULL和未定义