Skip to content

quickjs-zh/quickjs-android-1

Repository files navigation

quickjs-android

Download

quickjs-android 是 QuickJS JavaScript 引擎的 Andoroid 接口框架,实现了 Java 调用内核功能。armeabi-v7a 的大小仅 350KB,是 Google V8 的不错替代品,启动速度比 V8更快,几乎完美支持ES2020

使用教程

引入依赖
implementation 'io.github.taoweiji.quickjs:quickjs-android:1.1.3'
简单示例
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 = QuickJS.createRuntime();
JSContext

由 QuickJS 创建,一个 QuickJS 可以创建多个 JSContext,不使用的时候需要销毁。

JSContext context = quickJS.createContext(); int result = context.executeIntegerScript("var a = 2+10;\n a;", "file.js"); String result = context.executeStringScript("'Hello World';", "file.js");
JSObject
JSObject user = new JSObject(context).set("name", "Wiki").set("age", 18); Log.e("QuickJS", String.valueOf(user.getString("name"))); Log.e("QuickJS", String.valueOf(user.getInteger("age"))); user.registerJavaMethod(new JavaVoidCallback() { @Override public void invoke(JSObject receiver, JSArray args) { Log.e("QuickJS", args.getString(0)); } }, "log"); user.executeVoidFunction("log", new JSArray(context).push("Hello World"));
JSArray
JSArray array = new JSArray(context).push(1).push(3.14).push(true).push("Hello World"); Log.e("QuickJS", String.valueOf(array.getInteger(0))); Log.e("QuickJS", String.valueOf(array.getDouble(1)));
JSFunction
JSFunction log = new JSFunction(context, new JavaVoidCallback() { @Override public void invoke(JSObject receiver, JSArray args) { Log.e("QuickJS", args.getString(0)); } }); JSFunction message = new JSFunction(context, new JavaCallback() { @Override public Object invoke(JSObject receiver, JSArray array) { return "Hello World"; } }); context.set("console", new JSObject(context).set("log", log).set("message", message)); context.executeVoidScript("console.log(console.message())", null);

QuickJS

方法 说明
static QuickJS createRuntime() 创建运行时
JSContext createContext() 创建上下文
void close() 销毁引擎

JSValue

对象会自动回收,开发者无需手动close()

方法 说明
static JSObject Undefined(JSContext context) 获取Undefined对象
static JSValue NULL() 获取NULL对象
TYPE getType() 获取数据类型
boolean isUndefined()

JSObject

继承JSValue

方法 说明
set(key, value) 设置属性,支持int、boolean、double、String、JSValue
int getInteger(String key) 返回值int对象值,如果没有就会返回0
boolean getBoolean(String key) 返回值boolean对象值,如果没有就会返回false
double getDouble(String key) 返回值double对象值,如果没有就会返回0
String getString(String key) 返回值String对象值,如果没有就会返回null
JSArray getArray(String key) 返回值JSArray对象值,如果没有就会返回null
JSObject getObject(String key) 可能会返回JSObject、JSArray、JSFunction,如果没有就会返回null
registerJavaMethod(JavaCallback callback, String jsFunctionName) 注册JS函数,调用函数会执行java的Callback,带有返回值
registerJavaMethod(JavaVoidCallback callback, String jsFunctionName) 注册JS函数,调用函数会执行java的Callback,不带返回值
Object executeFunction(String name, JSArray parameters) 一共提供了10个相关的方法,用于执行JS函数获取返回值
boolean contains(String key) 判断是否包含属性
String[] getKeys() 获取所有的属性名称

JSArray

继承JSObject

方法 说明
push(value) 设置属性,支持int、boolean、double、String、JSValue
int getInteger(String key) 返回值int对象值,如果没有就会返回0
boolean getBoolean(String key) 返回值boolean对象值,如果没有就会返回false
double getDouble(String key) 返回值double对象值,如果没有就会返回0
String getString(String key) 返回值String对象值,如果没有就会返回null
JSArray getArray(String key) 返回值JSArray对象值,如果没有就会返回null
JSObject getObject(String key) 可能会返回JSObject、JSArray、JSFunction,如果没有就会返回null
length() 数组大小

JSFunction

继承JSObject

方法 说明
JSFunction(JSContext context, JavaCallback callback) 构造函数
JSFunction(JSContext context, JavaVoidCallback callback) 构造函数
Object call(JSValue.TYPE type, JSObject receiver, JSArray parameters) 调用方法

JSContext

继承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)

About

Android Bindings for QuickJS, A fine little javascript engine.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 89.5%
  • JavaScript 7.3%
  • Java 1.9%
  • C++ 0.8%
  • Makefile 0.4%
  • Shell 0.1%