Android 下的 QuickJS Binding 庫(kù)特性使用詳解
GitHub 地址:quickjs-android-wrapper
特性
- 支持 Java 和 JavaScript 類型互轉(zhuǎn)
- 支持 Promise 異步執(zhí)行
- 支持字節(jié)碼編譯和執(zhí)行
- 支持模塊加載執(zhí)行
- 內(nèi)置
console.log實(shí)現(xiàn) - 統(tǒng)一的 JavaScript 異常處理
依賴
repositories {
mavenCentral()
}
dependencies {
implementation 'wang.harlon.quickjs:wrapper:0.0.18'
}
使用
創(chuàng)建 JSContext
QuickJSContext context = QuickJSContext.create();
執(zhí)行 JavaScript
QuickJSContext context = QuickJSContext.create();
context.evaluate("var a = 1 + 2;");
支持的 Java 類型
以下的 Java 類型可以直接轉(zhuǎn)換到 JavaScript 中使用:
boolean
int
double
String
null
JSObject 代表一個(gè) JavaScript 對(duì)象
JSFunction 代表一個(gè) JavaScript 方法
JSArray 代表一個(gè) JavaScript 數(shù)組
屬性設(shè)置
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
編譯和執(zhí)行字節(jié)碼
byte[] code = context.compile("'hello, world!'.toUpperCase();");
context.execute(code);
ESModule 模塊加載和執(zhí)行
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 代碼執(zhí)行都是單線程,基于創(chuàng)建時(shí)的線程決定,不支持多線程執(zhí)行。
參考
以上就是Android 下的 QuickJS Binding 庫(kù)特性使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Android QuickJS Binding 庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android仿視頻加載旋轉(zhuǎn)小球動(dòng)畫效果的實(shí)例代碼
這篇文章主要介紹了Android仿視頻加載旋轉(zhuǎn)小球動(dòng)畫效果的實(shí)例代碼,文中給大家提到了PathMeasure的用法,介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
android實(shí)現(xiàn)底部導(dǎo)航欄
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)底部導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android變形(Transform)之Camera使用介紹
Camera主要實(shí)現(xiàn)3D的變形,有轉(zhuǎn)動(dòng),旋轉(zhuǎn)等,Camera的源碼是由Native(本地代碼)實(shí)現(xiàn),提供的接口也比較簡(jiǎn)單,感興趣的朋友可以參考下,或許對(duì)你學(xué)習(xí)有所幫助2013-02-02
android中DatePicker和TimePicker的使用方法詳解
這篇文章主要介紹了android中DatePicker和TimePicker的使用方法,是Android中常用的功能,需要的朋友可以參考下2014-07-07
Android使用HorizontalScrollView實(shí)現(xiàn)水平滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android使用HorizontalScrollView實(shí)現(xiàn)水平滾動(dòng),并點(diǎn)擊有相應(yīng)的反應(yīng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
利用Warensoft Stock Service編寫高頻交易軟件
本文主要介紹了利用Warensoft Stock Service編寫高頻交易軟件的方法步驟,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Android WebView實(shí)現(xiàn)長(zhǎng)按保存圖片及長(zhǎng)按識(shí)別二維碼功能
本文要使用Android WebView實(shí)現(xiàn)長(zhǎng)按保存圖片及長(zhǎng)按識(shí)別二維碼功能,當(dāng)用戶在瀏覽網(wǎng)頁(yè)的時(shí)候,長(zhǎng)按某一區(qū)域,識(shí)別如果是圖片,則彈出彈框,出現(xiàn)保存圖片的功能2018-01-01
android自動(dòng)安裝apk代碼實(shí)例(不使用apk安裝器安裝)
這篇文章主要介紹了android自動(dòng)安裝apk代碼實(shí)例,代碼簡(jiǎn)單,大家參考使用吧2013-11-11
Android Studio配置Kotlin開發(fā)環(huán)境詳細(xì)步驟
這篇文章主要介紹了Android Studio配置Kotlin開發(fā)環(huán)境詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android入門之SubMenu的實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)SubMenu子菜單的效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定的幫助,感興趣的可以了解一下2022-11-11

