Android 下的 QuickJS Binding 庫特性使用詳解
GitHub 地址:quickjs-android-wrapper
特性
- 支持 Java 和 JavaScript 類型互轉(zhuǎn)
- 支持 Promise 異步執(zhí)行
- 支持字節(jié)碼編譯和執(zhí)行
- 支持模塊加載執(zhí)行
- 內(nèi)置
console.log
實現(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
代表一個 JavaScript 對象
JSFunction
代表一個 JavaScript 方法
JSArray
代表一個 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)建時的線程決定,不支持多線程執(zhí)行。
參考
以上就是Android 下的 QuickJS Binding 庫特性使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Android QuickJS Binding 庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android上的一個網(wǎng)絡(luò)接口和圖片緩存框架enif簡析
android上的一個網(wǎng)絡(luò)接口和圖片緩存框架enif詳細(xì)介紹:底層網(wǎng)絡(luò)接口采用apache的httpclient連接池框架、圖片緩存采用基于LRU的算法等等,需要了解的朋友可以詳細(xì)參考下2012-12-12Android使用ViewPager實現(xiàn)屏幕滑動效果
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實現(xiàn)屏幕滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Android開發(fā)時盡管已root但是ddms還是沒有data路徑怎么辦
這篇文章主要介紹了Android開發(fā)時盡管已root但是ddms還是沒有data路徑怎么辦的相關(guān)資料,需要的朋友可以參考下2015-12-12Android入門之利用Spinner實現(xiàn)彈出選擇對話框
這篇文章主要為大家詳細(xì)介紹了Android里如何巧用Spinner做彈出選擇對話框,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下2022-11-11Android Studio自動排版的兩種實現(xiàn)方式
這篇文章主要介紹了Android Studio自動排版的兩種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android實現(xiàn)360手機(jī)助手底部的動畫菜單
這篇文章給大家分享了利用Android實現(xiàn)360手機(jī)助手底部的動畫菜單效果,文中給出了實例代碼,這樣對大家的學(xué)習(xí)或者理解更有幫助,有需要的朋友們下面來一起看看吧。2016-10-10