我想在我的 android 应用程序中使用 j2v8 来运行用 js 编写的现有代码。
现有的 js 文件有十多个,它们互相调用。
当我编写单个测试 js 文件并执行代码时,它运行良好,但是当我想运行实际的 js 文件时,它会抛出异常并且应用程序退出。
使用 j2v8 的代码如下所示:
V8 runtime = V8.createV8Runtime();
String jsContent = getFileContent("security/security.js", this.getBaseContext());
runtime.executeModule(jsContent, "", "", "file:///android_asset/security/");
Object obj = runtime.executeJSFunction("initPrepare");
运行executeModule方法时应用程序退出,我尝试了executeScript和executeVoidScript方法,都失败了。
错误消息如下所示:
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testapplication, PID: 26701
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: file:///android_asset/security/:1: SyntaxError: Cannot use import statement outside a module
import * as Crypto from "./jahport-crypto-wrapper.js";
^^^^^^
com.eclipsesource.v8.V8ScriptCompilationException
at com.eclipsesource.v8.V8._executeScript(Native Method)
at com.eclipsesource.v8.V8.executeScript(V8.java:1134)
at com.eclipsesource.v8.V8.executeModule(V8.java:737)
at com.example.testapplication.MainActivity.jsTest(MainActivity.java:72)
... 13 more
I/Process: Sending signal. PID: 26701 SIG: 9
Disconnected from the target VM, address: 'localhost:63197', transport: 'socket'
我已经在 google 中搜索了错误消息,我能找到的所有答案都是即将在标签中添加“type=module”,但我使用的是 js 文件并且它没有标签。
谁能帮我这个?使用 j2v8 或不使用 j2v8 解决此问题的任何方法,我只想在我的应用程序中运行 js 文件,无论如何。