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变形(Transform)之Camera使用介绍
Camera主要实现3D的变形,有转动,旋转等,Camera的源码是由Native(本地代码)实现,提供的接口也比较简单,感兴趣的朋友可以参考下,或许对你学习有所帮助2013-02-02
android中DatePicker和TimePicker的使用方法详解
这篇文章主要介绍了android中DatePicker和TimePicker的使用方法,是Android中常用的功能,需要的朋友可以参考下2014-07-07
Android使用HorizontalScrollView实现水平滚动
这篇文章主要为大家详细介绍了Android使用HorizontalScrollView实现水平滚动,并点击有相应的反应效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-11-11
利用Warensoft Stock Service编写高频交易软件
本文主要介绍了利用Warensoft Stock Service编写高频交易软件的方法步骤,具有一定的参考价值,下面跟着小编一起来看下吧2017-01-01
Android WebView实现长按保存图片及长按识别二维码功能
本文要使用Android WebView实现长按保存图片及长按识别二维码功能,当用户在浏览网页的时候,长按某一区域,识别如果是图片,则弹出弹框,出现保存图片的功能2018-01-01
android自动安装apk代码实例(不使用apk安装器安装)
这篇文章主要介绍了android自动安装apk代码实例,代码简单,大家参考使用吧2013-11-11
Android Studio配置Kotlin开发环境详细步骤
这篇文章主要介绍了Android Studio配置Kotlin开发环境详细步骤的相关资料,需要的朋友可以参考下2017-05-05


最新评论