quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单。armeabi-v7a 的大小仅 350KB,是 Google V8 不错的替代品,启动速度比 V8 快,内存占用更低,支持 ES2020。
使用教程
https://github.com/taoweiji/quickjs-android
引入依赖
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) | 可能会返回Integer、Double、Boolean、String、JSArray、JSObject、JSFunction、null |
| double executeDoubleFunction(String name, JSArray parameters) | 返回 double,默认返回 0 |
| boolean executeBooleanFunction(String name, JSArray parameters) | 返回boolean,默认人会false |
| String executeStringFunction(String name, JSArray parameters) | 返回String,默认返回null |
| JSArray executeArrayFunction(String name, JSArray parameters) | 返回JSArray,默认返回null |
| JSObject executeObjectFunction(String name, JSArray parameters) | 可能会返回JSObject、JSArray、JSFunction,默认返回null |
| void executeVoidFunction(String name, JSArray parameters) | 没有返回值 |
| Object executeFunction2(String name, Object... parameters) | 可能返回Integer、Double、Boolean、String、JSArray、JSObject、JSFunction、null,入参为java数组,仅支持Integer、Double、Boolean、String、JSArray、JSObject、JSFunction、null |
| 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) | 执行js脚本 |
| double executeDoubleScript(String source, String fileName) | 执行js脚本 |
| String executeStringScript(String source, String fileName) | 执行js脚本 |
| boolean executeBooleanScript(String source, String fileName) | 执行js脚本 |
| Object executeScript(String source, String fileName) | 执行js脚本,可能返回Integer、Double、Boolean、String、JSArray、JSObject、JSFunction、null |
| void executeVoidScript(String source, String fileName) | 执行js脚本,无返回值 |
| JSArray executeArrayScript(String source, String fileName) | 执行js脚本,返回值为JSArray |
| JSObject executeObjectScript(String source, String fileName) | 执行js脚本,可能会返回JSObject、JSArray、JSFunction |
原文转载:http://www.shaoqun.com/a/776079.html
etoro:https://www.ikjzd.com/w/1402
折扣网站:https://www.ikjzd.com/w/74
quickjs-android是QuickJSJavaScript引擎的Android接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单。armeabi-v7a的大小仅350KB,是GoogleV8不错的替代品,启动速度比V8快,内存占用更低,支持ES2020。使用教程https://github.com/taoweiji/quickjs-android引入依赖implementatio
网络星期一:https://www.ikjzd.com/w/80
口述:恋上离婚男 他女儿让我对他好点:http://lady.shaoqun.com/m/a/13403.html
表嫂在我下面舔吸 强拉我的手叫我陪陪她:http://lady.shaoqun.com/m/a/274239.html
亚马逊美国站对家用婴儿换洗台安全规范:ASTM F2388-18:https://www.ikjzd.com/articles/145262
"血雨腥风"的价格战,看大卖如何应对的?:https://www.ikjzd.com/articles/145261
贸发局:https://www.ikjzd.com/w/1621
万国邮政联盟:https://www.ikjzd.com/w/861
我把"叔叔"追到手变情人:http://lady.shaoqun.com/a/272837.html
沃尔玛将会给批准的卖家提供免费2天送货徽章:https://www.ikjzd.com/articles/145268
没有评论:
发表评论