Android 下的 QuickJS Binding 库特性使用详解

 更新时间:2022年09月07日 16:24:12   作者:汪海游龙  
这篇文章主要介绍了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 代码执行都是单线程,基于创建时的线程决定,不支持多线程执行。

参考

quickjs-java

quack

quickjs-android

以上就是Android 下的 QuickJS Binding 库特性使用详解的详细内容,更多关于Android QuickJS Binding 库的资料请关注脚本之家其它相关文章!

相关文章

  • Android实现美女拼图游戏详解

    Android实现美女拼图游戏详解

    这篇文章给大家用实例介绍了利用Android如何实现美女拼图游戏,对大家开发拼图游戏具有一定的参考借鉴价值,感兴趣的朋友们一起来看看吧。
    2016-09-09
  • Android控件CardView实现卡片效果

    Android控件CardView实现卡片效果

    这篇文章主要为大家详细介绍了Android控件CardView实现卡片效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Android ViewPager向导页面制作方法

    Android ViewPager向导页面制作方法

    这篇文章主要为大家详细介绍了Android ViewPager向导页面制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 实现秒转换成时分秒的方法

    Android 实现秒转换成时分秒的方法

    这篇文章主要介绍了Android 实现秒转换成时分秒的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Android实现多段颜色进度条效果

    Android实现多段颜色进度条效果

    这篇文章主要为大家详细介绍了Android实现多段颜色进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新

    浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新

    这篇文章主要介绍了浅谈Android中适配器的notifyDataSetChanged()为何有时不刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Android开发之Wifi基础教程

    Android开发之Wifi基础教程

    这篇文章主要介绍了Android开发Wifi基础教程,实例分析了Wifi的各种常见基本技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Android Recyclerview实现上拉加载更多功能

    Android Recyclerview实现上拉加载更多功能

    在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能。下文给大家带来了Android Recyclerview上拉加载更多功能,需要的朋友参考下吧
    2017-05-05
  • Android XML数据解析要点介绍

    Android XML数据解析要点介绍

    这篇文章主要为大家介绍了Android XML数据解析要点介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Android实现底部半透明弹出框PopUpWindow效果

    Android实现底部半透明弹出框PopUpWindow效果

    这篇文章主要为大家详细介绍了Android实现底部半透明弹出框PopUpWindow效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论