标签: j2v8

如何使用J2V8在Android中使用NodeJS

我已经使用J2V8库创建了android的代码,用于在android mobile中执行nodejs脚本.但是当我运行应用程序时,它给了我错误.

Gradle依赖项

compile 'com.eclipsesource.j2v8:j2v8:4.6.0@aar'
Run Code Online (Sandbox Code Playgroud)

...

@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;
}

...
Run Code Online (Sandbox Code Playgroud)

错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{in.asissuthar.lion/in.asissuthar.lion.ConsoleActivity}: java.lang.UnsupportedOperationException:
StartNodeJS …
Run Code Online (Sandbox Code Playgroud)

java android node.js j2v8

12
推荐指数
1
解决办法
1605
查看次数

卸载本机库

TLDR;

有什么办法告诉java联合国加载本机库,以便我可以重新加载它?(我知道它只能在单个类加载器中加载。请参见下文)。我知道当类加载器被垃圾回收时,它已被卸载,但是强制垃圾回收没有成功。有任何想法吗?


我发现了这个问题,这解释了为什么我遇到错误: .dll已在另一个类加载器中加载?

但这不是我想做的事。我们有一个jar,希望能够在运行时动态加载(插件样式),以便在另一个服务上运行一些规模测试。

它在第一次运行时运行良好,但是当我停止测试运​​行并尝试卸载以前的类加载器并加载新的类加载器时,出现以下错误:

Caused by: java.lang.UnsatisfiedLinkError: Could not load J2V8 library. Reasons: 
        no j2v8_macosx_x86_64 in java.library.path
        Native Library /Users/brian.trezise/libj2v8_macosx_x86_64.dylib already loaded in another classloader

        at com.eclipsesource.v8.LibraryLoader.loadLibrary(LibraryLoader.java:71)
        at com.eclipsesource.v8.V8.load(V8.java:70)
        at com.eclipsesource.v8.V8.createV8Runtime(V8.java:132)
        ... 8 more
Run Code Online (Sandbox Code Playgroud)

这是我的方法,该方法创建一个新的类加载器来动态加载我的jar,如果以前是它,则通过调用使它失效classLoader.close()

public void reloadJar(String jarName) throws IOException {
        if (this.classLoader != null) {
            classLoader.close(); //Invalidate the old class loader so we can load a new one
        }
        File file = new File(JAR_FILE_DIR + jarName);
        if (!file.exists()) {
            throw new IllegalStateException("The specified file …
Run Code Online (Sandbox Code Playgroud)

java native j2v8

6
推荐指数
0
解决办法
3766
查看次数

Eclipse Auto Deploy不包含本机库

我在eclipse中有一个Java webapp.我已启用自动部署,因此每当我进行更改时,eclipse会自动将webapp重新部署到我的本地Tomcat服务器,而我所要做的就是刷新页面.到目前为止,这一直很好,很花哨.

但是,我最近添加了这种依赖:

    <dependency>
        <groupId>com.eclipsesource.j2v8</groupId>
        <artifactId>j2v8_win32_x86_64</artifactId>
        <version>3.1.6</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

此依赖项包括一些本机库(.dllWindows计算机上的文件).当我手动部署时(通过右键单击项目,单击"运行方式"然后"在服务器上运行"),这样可以正常工作.我可以像我期望的那样使用库.

如果我然后进行更改(任何更改,甚至添加注释),eclipse会自动重新部署.但是当我尝试使用该库时(通过简单刷新页面并再次运行完全相同的代码),我收到此错误:

java.lang.UnsatisfiedLinkError: Could not load J2V8 library. Reasons: 
    no j2v8_win32_x86_64 in java.library.path
Run Code Online (Sandbox Code Playgroud)

所以看来eclipse无法在自动部署时加载本机库,即使它在我手动部署时工作正常.

java.library.path但两种情况下的值相同:

C:\Program Files\Java\jdk1.8.0_65\bin;
C:\WINDOWS\Sun\Java\bin;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\ProgramData\Oracle\Java\javapath;
C:\Program Files\ImageMagick-6.9.0-Q16;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\ImageMagick-6.8.9-Q16;
C:\Program Files\Java\jdk1.8.0_65;
c:\Program Files (x86)\Intel\iCLS Client\;
c:\Program Files\Intel\iCLS Client\;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files\WIDCOMM\Bluetooth Software\;
C:\Program Files\WIDCOMM\Bluetooth …
Run Code Online (Sandbox Code Playgroud)

java eclipse tomcat maven j2v8

5
推荐指数
1
解决办法
393
查看次数

使用J2V8从.js执行函数

我正在使用J2V8在Android上执行JavaScript代码.在我的Java代码中,我可以访问和执行单独的.js文件的JavaScript函数吗?如果有可能,我该怎么办?

谢谢:

伯纳特

javascript android j2v8

5
推荐指数
1
解决办法
1994
查看次数

如何使用chrome开发者工具在Android中调试J2V8?

以前曾提出过类似的问题,但没有吸引力。显然,这是可能的,但目前还不清楚如何在我们自己的非 tabris Android 应用程序中做到这一点。

关于此事我们拥有的最好的文档是这个提交,但我V8.setFlags("--expose-debug-as=Debug");也尝试过V8.setFlags("--expose-debug-as=" + DebugHandler.DEBUG_OBJECT_NAME);,但 Chrome 开发人员工具中没有出现可调试的应用程序。

我什至尝试与启用 Stetho 组合使用,在这种情况下我能够调试该应用程序,但没有可调试的 javascript 源。我相信我已经很接近了,但还缺少一个关键的小细节。

android v8 google-chrome-devtools stetho j2v8

5
推荐指数
1
解决办法
880
查看次数

J2V8和Stetho

我有一个使用J2V8的Android应用程序,并希望使用Stetho创建一个我可以在Chrome开发工具中使用的调试桥.

有没有关于如何将Stetho连接到我正在使用的V8运行时的文档?

debugging android v8 stetho j2v8

5
推荐指数
1
解决办法
150
查看次数

如何使用Gradle构建胖罐时编译不同的风格

我想在Java项目中包含Java Bindings for V8("J2V8").原因是(i)V8 JavaScript引擎比JRE附带的JavaScript引擎快得多,并且(ii)我使用的库仅在JavaScript中可用,并且Java的端口是非常省力的.

问题是J2V8是针对不同平台编译的:linux 64bit,macos 64bit,windows 64 bit,windows 32 bit.

我现在想要生成不同的JAR,包含所有依赖项(fat jar):

  • jabref-linux_x86_64.jar
  • jabref-macosx_x86_64.jar
  • jabref-windows_x86_32.jar
  • jabref-windows_x86_64.jar
  • jabref-all.jar - 没有v8引擎的平台独立JAR

我目前正在使用shadow插件创建胖罐.

请注意,该项目不是 Android项目.在那里,使用Android插件,这似乎是直截了当的.

第一个想法是引入配置和特定于配置的依赖项:

configurations {
    linux_x86_64Compile.extendsFrom compile
    macosx_x86_64Compile.extendsFrom compile
    windows_x86_32Compile.extendsFrom compile
    windows_x86_64Compile.extendsFrom compile
}

dependencies {
    compile configuration: 'linux_x86_64',   group: 'com.eclipsesource.j2v8', name: 'j2v8_linux_x86_x64',  version: '4.6.0'
    compile configuration: 'macosx_x86_64',  group: 'com.eclipsesource.j2v8', name: 'j2v8_macosx_x86_x64', version: '4.6.0'
    compile configuration: 'windows_x86_32', group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86',      version: '4.6.0'
    compile configuration: 'windows_x86_64', group: 'com.eclipsesource.j2v8', name: …
Run Code Online (Sandbox Code Playgroud)

v8 gradle build.gradle j2v8

5
推荐指数
1
解决办法
774
查看次数

在Android Studio中安装/使用J2V8

我是 Android Studio 开发的新手,也是 gradle 和 j2v8 的新手。我有一个示例 Hello World 应用程序,想在其中使用 j2v8 (只是出于好奇)。我的应用程序 gradle 中有以下内容

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    // https://mvnrepository.com/artifact/com.eclipsesource.j2v8/j2v8_android
    compile group: 'com.eclipsesource.j2v8', name: 'j2v8_android', version: '3.0.5'
}
Run Code Online (Sandbox Code Playgroud)

最后一个是我尝试添加 j2v8。接下来,我尝试了这篇文章中的示例行,因此我将以下内容添加到我的活动中:

V8 v8 = V8.createV8Runtime();
Run Code Online (Sandbox Code Playgroud)

我不明白的是我需要什么进口才能发挥作用。我肯定错过了一个或多个步骤,但很难在网上找到说明。

谢谢。

android android-studio j2v8

3
推荐指数
1
解决办法
2761
查看次数