经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
在 Android 使用 QuickJS JavaScript 引擎教程
来源:cnblogs  作者:ImWiki  时间:2021/6/7 8:56:31  对本文有异议

quickjs-androidQuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单。armeabi-v7a 的大小仅 350KB,是 Google V8 不错的替代品,启动速度比 V8 快,内存占用更低,支持 ES2020

  • armeabi-v7a 平台下,整体占用apk空间仅 350KB;
  • JS对象自动GC,无需手动释放;
  • 支持 ES6 Module,可以使用 import、export 函数;
  • 支持 Node.js 的 CommonJS 规范,可以使用 require、exports 函数;
  • 支持绑定 Java 注解函数;
  • 支持通过 Java Function Callback 函数注册JS函数;
  • 提供多线程 Executor;

使用教程

https://github.com/taoweiji/quickjs-android

引入依赖
  1. implementation 'io.github.taoweiji.quickjs:quickjs-android:1.+'
简单示例
  1. QuickJS quickJS = QuickJS.createRuntime();
  2. JSContext context = quickJS.createContext();
  3. int result = context.executeIntegerScript("var a = 2+10;\n a;", "file.js");
  4. context.close();
  5. quickJS.close();

对象介绍

QuickJS

运行环境,可以创建多个运行时环境,不同的环境之间不能共享对象,不使用的时候需要销毁。

  1. QuickJS quickJS = QuickJS.createRuntime();
JSContext

由 QuickJS 创建,一个 QuickJS 可以创建多个 JSContext,不使用的时候需要销毁。

  1. JSContext context = quickJS.createContext();
  2. int result = context.executeIntegerScript("var a = 2+10;\n a;", "file.js");
  3. String result = context.executeStringScript("'Hello World';", "file.js");
  4. context.close();
JSObject
  1. JSObject user = new JSObject(context).set("name", "Wiki").set("age", 18).set("time",System.currentTimeMillis());
  2. Log.e("QuickJS", String.valueOf(user.getString("name")));
  3. Log.e("QuickJS", String.valueOf(user.getInteger("age")));
  4. Log.e("QuickJS", String.valueOf(user.getDouble("time")));
  5. user.registerJavaMethod(new JavaVoidCallback() {
  6. @Override
  7. public void invoke(JSObject receiver, JSArray args) {
  8. Log.e("QuickJS", args.getString(0));
  9. }
  10. }, "log");
  11. user.executeVoidFunction("log", new JSArray(context).push("Hello World"));
JSArray
  1. JSArray array = new JSArray(context).push(1).push(3.14).push(true).push("Hello World");
  2. Log.e("QuickJS", String.valueOf(array.getInteger(0)));
  3. Log.e("QuickJS", String.valueOf(array.getDouble(1)));
JSFunction
  1. JSFunction log = new JSFunction(context, new JavaVoidCallback() {
  2. @Override
  3. public void invoke(JSObject receiver, JSArray args) {
  4. Log.e("QuickJS", args.getString(0));
  5. }
  6. });
  7. JSFunction message = new JSFunction(context, new JavaCallback() {
  8. @Override
  9. public Object invoke(JSObject receiver, JSArray array) {
  10. return "Hello World";
  11. }
  12. });
  13. context.set("console", new JSObject(context).set("log", log).set("message", message));
  14. context.executeVoidScript("console.log(console.message())", null);
addJavascriptInterface
  1. public class Console {
  2. int count = 0;
  3. @JavascriptInterface
  4. public void log(String msg) {
  5. count++;
  6. Log.d("console", msg);
  7. }
  8. @JavascriptInterface
  9. public void info(String msg) {
  10. count++;
  11. Log.i("console", msg);
  12. }
  13. @JavascriptInterface
  14. public void error(String msg) {
  15. count++;
  16. Log.e("console", msg);
  17. }
  18. @JavascriptInterface
  19. public int count() {
  20. return count;
  21. }
  22. }
  23. context.addJavascriptInterface(new Console(), "console");
  24. context.executeVoidScript("console.log('Hello World')", null);
  25. int count = context.executeIntegerScript("console.count()", null);
  26. Log.d("console", String.valueOf(count));

原文链接:http://www.cnblogs.com/taoweiji/p/14839326.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号