我在Java中使用了这段代码,效果很好
public String execute(String s)
{
Object result = null;
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
if (engine == null) {
throw new UnsupportedOperationException("JavaScript scripting engine not found");
}
Log.i("s",s);
try {
result = engine.eval(s);
} catch (Exception e) {
Log.i("e",e.toString());
}
return result.toString();
}
但是在具有相同输入(a)的android studio中使用时
engine.eval(a);
返回null!
Log cat of project
最佳答案
在Android Studio上,您正在使用Android框架构建项目。 JSR223默认情况下未嵌入Android的Java实现中。
但是您可以在图书馆中进行注册。
例如,使用https://github.com/APISENSE/rhino-android嵌入rhino
,即Java 7的JavaScript引擎到Android。 (免责声明:我维护此库)
编辑后续的评论
我试图重现您的行为,这是我所拥有的:
使用犀牛作为ScriptEngine
名称时:
09-20 11:13:16.151 5997-5997/? I/TEST: using Script engine name: rhino
09-20 11:13:16.159 5997-5997/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: test.app, PID: 5997
java.lang.NoClassDefFoundError: com.sun.script.javascript.ExternalScriptable
at com.sun.script.javascript.RhinoScriptEngine.<init>(RhinoScriptEngine.java:43)
at com.sun.script.javascript.RhinoScriptEngineFactory.getScriptEngine(RhinoScriptEngineFactory.java:51)
at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:154)
at test.app.Test.execute(Test.java:33)
at test.app.Test.scriptMethod(Test.java:23)
at test.app.Test.onCreate(Test.java:17)
[...]
当使用JavaScript作为
ScriptEngine
名称时:09-20 11:16:16.883 8776-8776/? I/TEST: using Script engine name: JavaScript
09-20 11:16:16.883 8776-8776/test.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: test.app, PID: 8776
java.lang.RuntimeException: Unable to start activity ComponentInfo{test.app/test.app.Test}: java.lang.UnsupportedOperationException: Engine not found: JavaScript
[...]
Caused by: java.lang.UnsupportedOperationException: Engine not found: JavaScript
at test.app.Test.execute(Test.java:37)
at test.app.Test.scriptMethod(Test.java:23)
at test.app.Test.onCreate(Test.java:17)
[...]
如您所见,rhino试图实例化
ScriptEngine
,但是类在加载时会抛出错误(com.sun.script.javascript.ExternalScriptable
)。问题是您的jar依赖项包含JSR223和某些引擎定义,但不包含实际的脚本引擎。
要纠正这种情况,您可能需要将an actual rhino implementation添加到依赖项中。
关于java - engine.eval()在Android Studio中返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46320972/