如何使用J2V8在Android中使用NodeJS

我已经创build了Android的代码,使用J2V8库来执行Android手机中的nodejs脚本。 但是当我运行应用程序时,它给了我错误。

Gradle依赖关系

compile 'com.eclipsesource.j2v8:j2v8:4.6.0@aar' 

 ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_console); runScript(); } private void runScript() { NodeJS nodeJS = NodeJS.createNodeJS(); try { File script = createTempScript("console.log(\"Hello NodeJS\")"); nodeJS.exec(script); script.delete(); } catch (Exception e) { e.printStackTrace(); } finally { nodeJS.release(); } } private File createTempScript(String script) throws IOException { File file = File.createTempFile("temp",".js", getCacheDir()); FileWriter fileWriter = new FileWriter(file); fileWriter.write(script); fileWriter.close(); return file; } ... 

错误

 java.lang.RuntimeException: Unable to start activity ComponentInfo{in.asissuthar.lion/in.asissuthar.lion.ConsoleActivity}: java.lang.UnsupportedOperationException: StartNodeJS Not Supported. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2348) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5345) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742) 

请帮我解决这个错误。


正常的V8引擎工作正常,但以上createNodeJS给出错误。

 V8 v8 = V8.createV8Runtime() 

根本原因

J2V8库包含一个JAR和一个包含v8引擎的本机库。 在你的情况下,JNI的本地库不编译与-D NODE_COMPATIBLE=1选项,因此你会得到以下错误:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{in.asissuthar.lion/in.asissuthar.lion.ConsoleActivity}: java.lang.UnsupportedOperationException: StartNodeJS Not Supported. 

这可以通过查看J2V8代码来确定。 我在下面添加了一个片段:

 #ifndef NODE_COMPATIBLE (env)->ThrowNew(unsupportedOperationExceptionCls, "StartNodeJS Not Supported."); #endif 

可能的解决scheme:

  1. 您需要用-D NODE_COMPATIBLE=1选项重新编译JNI源代码。 源代码可在https://github.com/eclipsesource/J2V8获得

要么

  1. 在他们的github上提出一个票据,以便他们可以用更新的本地库和节点支持来更新aar。