在 Android 使用 QuickJS JavaScript 引擎教程
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 |
在 Android 使用 QuickJS JavaScript 引擎教程的更多相关文章
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...
- JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案
1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolution Policy,只需要在游戏载入过程完成之后(cc.game.onStart函数回调中),调用下面的代 ...
- 浏览器-09 javascript引擎和Chromium网络栈
语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...
- javascript 基础教程[温故而知新一]
子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...
- JavaScript强化教程——Cocos2d-JS中JavaScript继承
javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...
- JavaScript简易教程(转)
原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...
- Android WebView与JavaScript交互操作(Demo)
应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http:// ...
- Android程序开发0基础教程(一)
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一) 平台简单介绍 令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...
随机推荐
- 手写Spring AOP,快来瞧一瞧看一看撒!
目录 AOP分析 Advice实现 定义Advice接口 定义前置.后置.环绕和异常增强接口 Pointcut实现 定义PointCut接口 定义正则表达式的实现类:RegExpressionPoin ...
- JavaScript 简写技巧
1. 声明变量 //普通写法 let x; let y = 20; //简写 let x, y = 20; 2. 给多个变量赋值 //普通写法 let a, b, c; a = 5; b = 8; c ...
- 【故障公告】数据库服务器 CPU 100% 引发网站故障
悄悄地它又突然来了 -- 数据库服务器 CPU 100% 问题,上次光临时间是 3-30 8:48,这次是 4-28 9:41. 这次我们做出了快速反应,发现后立即进行主备切换,这次一次切换成功,CP ...
- 使用vue-element-admin框架从后端动态获取菜单
1.前言 vue-element-admin是一个纯前端的框架,左侧菜单是根据路由生成的.实际开发中经常需要根据当前登陆人员的信息从后端获取菜单进行展示,本文将详细介绍如何实现该功能. 2.详解 ...
- hdu2722 简单最短路,处理好输入就行
题意: 从左上角走到右下角,有的最短时间,每段路径的长度都是2520,每段上都有自己的限制速度,方向. 思路: 直接写就行了,就是个最短路,权值是2520/限制,输入的时候细心点 ...
- 从苏宁电器到卡巴斯基(后传)第05篇:聊聊我对WannaCry产生的感慨
这几天看到网上对WannaCry勒索病毒讨论得沸沸扬扬,不免有些感触. 其实该病毒的这次爆发,完全可以类比N年前"熊猫烧香"爆发的情况.也就是国内杀软纷纷歇菜,让本来就没什么技术含 ...
- UVA10341解方程(二分)
题意: 给你一个方程 F[x] = pe^-x + qsin(x) + rcos(x) + stan(x) + tx^2 + u = 0(0<=p,r<=20,-20<= ...
- 学习Python一年,这次终于弄懂了浅拷贝和深拷贝
官方文档:copy主题 源代码: Lib/copy.py 话说,网上已经有很多关于Python浅拷贝和深拷贝的文章了,不过好多文章看起来还是决定似懂非懂,所以决定用自己的理解来写出这样一篇文章. 当别 ...
- upload
File saveDir=new File("D:/Test/UPLOAD"); if(!saveDir.isDirectory()){ saveDir.mkdirs(); } F ...
- sqlyog报错2058
报错描述 SQLyog连接mysql8.0时,SQLyog Ultimate显示报错信息并附带乱码 "错误号码2058,Plugin caching--sha2_passward could ...