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 引擎教程的更多相关文章

  1. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  2. Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)

    Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...

  3. JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案

    1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolution Policy,只需要在游戏载入过程完成之后(cc.game.onStart函数回调中),调用下面的代 ...

  4. 浏览器-09 javascript引擎和Chromium网络栈

    语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...

  5. javascript 基础教程[温故而知新一]

    子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...

  6. JavaScript强化教程——Cocos2d-JS中JavaScript继承

    javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  7. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

  8. Android WebView与JavaScript交互操作(Demo)

    应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http:// ...

  9. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

随机推荐

  1. 11. VUE 数组操作

    变异方法 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新.这些方法如下: push() 添加元素 <ul id="example-1"> <li ...

  2. PostGIS管网连通性分析

    GIS在管网数据中的很重要的一个应用方向就是"管网空间分析",其中包括连通性分析.上下游分析.爆管分析等等.下面是我使用postgis来实现该"管网连通性分析" ...

  3. windows内核开发环境的简易搭建

    一.windows内核开发需要的软件 1.WDK 2.WinDbg 3.virtualKD 4.DebugView 5.Visual C++ 6.0 6.VMware Workstation 二.wi ...

  4. PE文件格式偏移参考

    在进行PE文件格式病毒分析的时候,经常要使用到PE文件格式的解析,尤其是对LoadPE形式的病毒的分析,经常要查看PE文件格式的偏移,特地从博客<PE文件格式的偏移参考>中转载收录一份,之 ...

  5. C#-WiFi共享

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. pr加字幕

    选择免费字体 自由字体整理了免费的商用字体 安装字体 将下载好的.ttf文件,右键选择为所有用户安装 如果没有选择为所有用户安装,你在Arctime或者premiere中可能无法找到这个字体 而且想要 ...

  7. ThreadLocal不好用?那是你没用对!

    在 Java 中,如果要问哪个类使用简单,但用好最不简单?我想你的脑海中一定会浮现出一次词--"ThreadLocal". ​ 确实如此,ThreadLocal 原本设计是为了解决 ...

  8. 逆向工程初步160个crackme-------2

    有了第一个crackme的经验后,这个crackme用了半个小时就验证成功了.(思路和第一个crackme相似) 动态调试工具:ollydbg (2.10) 文件分析工具:PEID (0.95) 同样 ...

  9. UML类关系:依赖,关联,聚合和组合

    UML图示例:(可使用StartUML来画图,小巧^_^) http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 聚合:表 ...

  10. 【近取 Key】Alpha - v1.0 版本发布说明

    功能与特性 Alpha 版本虽然为本软件的第一代版本,但已基本覆盖了用户个人使用时的主要功能.除登陆注册与后台管理外,下文将分版块详细介绍面向用户的主要功能特性. 『产品主页』 潜在应用场景 场景 0 ...