Android 下的 QuickJS Binding 库特性使用详解
GitHub 地址:quickjs-android-wrapper
特性
- 支持 Java 和 JavaScript 类型互转
- 支持 Promise 异步执行
- 支持字节码编译和执行
- 支持模块加载执行
- 内置
console.log
实现 - 统一的 JavaScript 异常处理
依赖
repositories { mavenCentral() } dependencies { implementation 'wang.harlon.quickjs:wrapper:0.0.18' }
使用
创建 JSContext
QuickJSContext context = QuickJSContext.create();
执行 JavaScript
QuickJSContext context = QuickJSContext.create(); context.evaluate("var a = 1 + 2;");
支持的 Java 类型
以下的 Java 类型可以直接转换到 JavaScript 中使用:
boolean
int
double
String
null
JSObject
代表一个 JavaScript 对象
JSFunction
代表一个 JavaScript 方法
JSArray
代表一个 JavaScript 数组
属性设置
Java
JSObject globalObj = context.getGlobalObject(); JSObject obj1 = context.createNewJSObject(); obj1.setProperty("stringProperty", "hello"); obj1.setProperty("intProperty", 1); obj1.setProperty("doubleProperty", 0.1); obj1.setProperty("booleanProperty", true); obj1.setProperty("functionProperty", (JSCallFunction) args -> { return args[0] + "Wang"; }); globalObj.setProperty("obj1", obj1);
JavaScript
obj1.stringProperty; // hello string obj1.intProperty; // 1 obj1.doubleProperty; // 0.1 obj1.booleanProperty; // true obj1.functionProperty('Harlon'); // HarlonWang
属性获取
JavaScript
var obj1 = { stringProperty: 'hello string', intProperety: 1, doubleProperty: 0.1, booleanProperty: true, functionProperty: (name) => { return name + 'Wang'; } }
Java
JSObject globalObject = context.getGlobalObject(); JSObject obj1 = globalObject.getJSObjectProperty("obj1"); obj1.getProperty("stringProperty"); // hello obj1.getProperty("intProperty"); // 1 obj1.getProperty("doubleProperty"); // 0.1 obj1.getProperty("booleanProperty"); // true obj1.getJSFunctionProperty("functionProperty").call("Harlon"); // HarlonWang
编译和执行字节码
byte[] code = context.compile("'hello, world!'.toUpperCase();"); context.execute(code);
ESModule 模块加载和执行
Java
JSModule.setModuleLoader(new JSModule.Loader() { @Override public String getModuleScript(String moduleName) { return "export var name = 'Hello world';\n" + "export var age = 18;"; } });
JavaScript
import {name, age} from './a.js'; console.log('name:' + name); // Jack console.log('age:' + age); // 18
同步
所有的 JavaScript 代码执行都是单线程,基于创建时的线程决定,不支持多线程执行。
参考
以上就是Android 下的 QuickJS Binding 库特性使用详解的详细内容,更多关于Android QuickJS Binding 库的资料请关注脚本之家其它相关文章!
相关文章
浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新
这篇文章主要介绍了浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07Android Recyclerview实现上拉加载更多功能
在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能。下文给大家带来了Android Recyclerview上拉加载更多功能,需要的朋友参考下吧2017-05-05Android实现底部半透明弹出框PopUpWindow效果
这篇文章主要为大家详细介绍了Android实现底部半透明弹出框PopUpWindow效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-07-07
最新评论