在 Android 使用 QuickJS JavaScript 引擎教程
程序员文章站
2022-03-04 09:52:44
quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单。armeabi-v7a 的大小仅 350KB,是 Google V8 不错的替代品,启动速度比 V8 快,内存占用更低,支持 ES2020。 ......
是 quickjs javascript 引擎的 android 接口框架,整体基于面向对象设计,提供了自动gc功能,使用简单。armeabi-v7a 的大小仅 350kb,是 google v8 不错的替代品,启动速度比 v8 快,内存占用更低,支持 es2020。
- armeabi-v7a 平台下,整体占用apk空间仅 350kb;
- js对象自动gc,无需手动释放;
- 支持 es6 module,可以使用 import、export 函数;
- 支持 node.js 的 commonjs 规范,可以使用 require、exports 函数;
- 支持绑定 java 注解函数;
- 支持通过 java function callback 函数注册js函数;
- 提供多线程 executor;
使用教程
引入依赖
implementation 'io.github.taoweiji.quickjs:quickjs-android:1.+'
简单示例
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"); context.close();
jsobject
jsobject user = new jsobject(context).set("name", "wiki").set("age", 18).set("time",system.currenttimemillis()); log.e("quickjs", string.valueof(user.getstring("name"))); log.e("quickjs", string.valueof(user.getinteger("age"))); log.e("quickjs", string.valueof(user.getdouble("time"))); 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);
addjavascriptinterface
public class console { int count = 0; @javascriptinterface public void log(string msg) { count++; log.d("console", msg); } @javascriptinterface public void info(string msg) { count++; log.i("console", msg); } @javascriptinterface public void error(string msg) { count++; log.e("console", msg); } @javascriptinterface public int count() { return count; } } context.addjavascriptinterface(new console(), "console"); context.executevoidscript("console.log('hello world')", null); int count = context.executeintegerscript("console.count()", null); log.d("console", string.valueof(count));
推荐阅读
-
在电脑上安装配置使用安卓Android模拟器的方法(图文教程)
-
在Android Studio中Parcelable插件的简单使用教程
-
在JavaScript中操作时间之getYear()方法的使用教程
-
Powershell小技巧之使用Jint引擎在PowerShell中执行Javascript函数
-
在Linux系统中安装使用恶意软件扫描工具及杀毒引擎的教程
-
在 Android 使用 QuickJS JavaScript 引擎教程
-
使用php-js-ext在PHP内解析javascript脚本_PHP教程
-
在电脑上安装配置使用安卓Android模拟器的方法(图文教程)
-
在Yii框架中使用PHP模板引擎Twig的例子_PHP教程
-
在Android Studio中Parcelable插件的简单使用教程