Java环境与Android环境中使用QuickJS 至简网格的服务器主体是用Java实现的业务接口绝大部分用json文档即可实现较为复杂的逻辑用到JS。JS引擎用V8显得太重选择graaljs就对java运行环境产生依赖并且安卓不支持所以最终选择QuickJS功能、性能都满足要求。开源的java封装中大多几年没更新了找了一个更新比较近的开源项目HarLonWang QuickJS Wrapper继承了它的功能并做了以下改进将QuickJS替换为QuickJS-NG有改进由社区维护不依赖单个大牛;改正了一些小bug.实现ESModule支持原实现返回空用法见项目开源首页增加NativeLibraryLoader模仿xerial sqlite jdbc加载驱动的实现;增加Logger支持格式参照logback用{}做占位符默认的js console使用Logger输出;支持Linux(x86-64、aarch64)、Windows(x86-64)、Termux(aarch64)、Android(aarch64);增加测试用例。开源地址APL协议jar、aar文件在开源库的release中没有放mavenZhiJianMesh/QuickJS: QuickJS java wrapper modified based on harlonwangs QuickJS或QuickJS: QuickJS java wrapper modified based on harlonwangs QuickJS为什么不直接使用HarLonWang QuickJS因为这个项目只提供了安卓的原生库没有提供jvm的。反正都需要自己搭环境编译并且我还需要在Termux中运行使用Android的so是不行的所以干脆自己搞一个顺便做一点改进。使用很简单最基本的使用方法如下QuickJSContext context QuickJSContext.create(); // evaluating JavaScript context.evaluate(1 2;); //3 // destroy QuickJSContext context.close();Js使用Java中的对象public class FunctionCls { private int base 0; public FunctionCls() {} public FunctionCls(int base) {this.base base;} //添加注解会自动绑定到js对象中 JavascriptMethod public int add(int a, int b) { return a b base; } } //context.setLogger(QuickJSContext.SystemConsole); JSObject global context.getGlobalObject(); global.setProperty(funcCls, FunctionCls.class); Object result context.evaluate(funcCls.add(1,99)); //100 FunctionCls base new FunctionCls(10); global.setJavaObject(funcCls1, base); result context.evaluate(funcCls1.add(1,99)); //110Java使用Js中的函数context.evaluate(function test_aaa(a) {return aaa_a;}); JSFunction jf context.getGlobalObject().getJSFunction(test_aaa); Object r jf.call(test); //aaa_test jf.release(); //如非必要JSObject最好及时释放使用模块除了下面这种使用方法还有其他使用方式请参照项目首页介绍Object o getContext().evaluateModule( export var name Jack;\n export var age 18;\n export function report() { return name : age};, a.js); JSObject module (JSObject) o; String name module.getProperty(name); //Jack int age (Number)module.getProperty(age)).intValue(); //18 JSFunction f module.getJSFunction(report); String result (String) f.call(); // Jack:18 f.release(); module.release();更多例子请参照开源库首页的ReadMe或者参照Junit的测试用例。如果项目对你有用在项目首页给个star以示鼓励谢谢