Android开发中使用rhino-android脚本引擎时如何在javascript中导入java包?

问题描述 投票:0回答:1

我正在尝试将PC java项目迁移到android。 项目结构如下:

https://github.com/speedyHKjournalist/CosmicAndroid/tree/main

Javascript文件位于目录:app/src/main/assets/scripts

Java文件位于目录:app/src/main/java

对于 scriptEngine,我在 app/build.gradle 中使用 rhino-android。 现在从java类调用js函数没有问题了。

我的问题是如何从 javascript 文件导入 java 数据包?

例如在 Javascript 中:

const LifeFactory = importPackage('server.life.LifeFactory');

错误信息表明rhino无法在android中找到java类文件:

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)
javascript java android rhino
1个回答
0
投票

这应该可以解决问题(按照https://rhino.github.io/tutorials/scripting_java/#accessing-java-packages-and-classes),假设你的包名称确实是“server.life.LifeFactory” :

const LifeFactory = importPackage(Packages.server.life.LifeFactory);
© www.soinside.com 2019 - 2024. All rights reserved.