You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发中使用rhino-android引擎,JS如何导入Java包?

问题描述
  • 迁移背景:将PC端Java项目迁移至Android,JS文件存放路径为app/src/main/assets/scripts,Java文件路径为app/src/main/java,使用rhino-android作为脚本引擎。
  • 当前状态:Java调用JS函数正常,但JS中导入Java包时触发错误。
  • 出错代码示例:
const LifeFactory = importPackage('server.life.LifeFactory');
  • 报错信息:
javax.script.ScriptException: org.mozilla.javascript.EvaluatorException: Function importPackage must be called with a package; had "server.life.LifeFactory" instead. (<Unknown source>#46) in <Unknown source> at line number 46
2023-10-24 20:11:04.063 29240-29272 System.err              com.mapleserver                      W      at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:330)
2023-10-24 20:11:04.065 29240-29272 System.err              com.mapleserver                      W      at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:288)
2023-10-24 20:11:04.065 29240-29272 System.err              com.mapleserver                      W      at scripting.SynchronizedInvocable.invokeFunction(SynchronizedInvocable.java:32)
2023-10-24 20:11:04.066 29240-29272 System.err              com.mapleserver                      W      at scripting.event.EventManager.lambda$schedule$0(EventManager.java:172)
2023-10-24 20:11:04.066 29240-29272 System.err              com.mapleserver                      W      at scripting.event.EventManager.$r8$lambda$AR51vuvnFxSsSXFZIGDAyGdIYwk(Unknown Source:0)
2023-10-24 20:11:04.066 29240-29272 System.err              com.mapleserver                      W      at scripting.event.EventManager$$ExternalSyntheticLambda0.run(Unknown Source:6)
2023-10-24 20:11:04.067 29240-29272 System.err              com.mapleserver                      W      at scripting.event.scheduler.EventScriptScheduler.runBaseSchedule(EventScriptScheduler.java:80)
2023-10-24 20:11:04.067 29240-29272 System.err              com.mapleserver                      W      at scripting.event.scheduler.EventScriptScheduler.lambda$new$0(EventScriptScheduler.java:47)
2023-10-24 20:11:04.068 29240-29272 System.err              com.mapleserver                      W      at scripting.event.scheduler.EventScriptScheduler.$r8$lambda$s8G568Z6xysfSNUGhJqxUwX71R0(Unknown Source:0)
2023-10-24 20:11:04.068 29240-29272 System.err              com.mapleserver                      W      at scripting.event.scheduler.EventScriptScheduler$$ExternalSyntheticLambda1.run(Unknown Source:2)
2023-10-24 20:11:04.068 29240-29272 System.err              com.mapleserver                      W      at server.TimerManager$LoggingSaveRunnable.run(TimerManager.java:145)
2023-10-24 20:11:04.068 29240-29272 System.err              com.mapleserver                      W      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
2023-10-24 20:11:04.069 29240-29272 System.err              com.mapleserver                      W      at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:307)
2023-10-24 20:11:04.069 29240-29272 System.err              com.mapleserver                      W      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:302)
解决方案

1. 修正importPackage用法

importPackage仅用于导入包,不能直接传入完整类名。正确写法:

importPackage(server.life);
const lifeFactory = LifeFactory; // 直接使用包内类名

2. 用importClass导入单个类

如果只需要导入特定类,改用importClass:

importClass(server.life.LifeFactory);
const lifeFactory = LifeFactory;

3. 确保类的可访问性

  • 确认server.life.LifeFactory是public权限,非public类无法被Rhino访问。
  • 检查代码混淆规则,在proguard-rules.pro中添加保留规则:
-keep class server.life.LifeFactory { *; }
// 如需保留整个包,可使用:
-keep class server.life.** { *; }

4. 配置Rhino类加载器

初始化脚本引擎时,设置正确的类加载器,让Rhino能找到项目类:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
if (engine instanceof RhinoScriptEngine) {
    ((RhinoScriptEngine) engine).setContextClassLoader(getClass().getClassLoader());
}

内容的提问来源于stack exchange,提问作者k0ala Xing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:03:25