无法加载(找到)j2v8_android_x86库

时间:2015-06-17 13:04:53

标签: java android android-ndk apk j2v8

我有一个使用j2v8_android 2.2.1库的gradle项目(它为V8 JS引擎提供Java绑定 - android端口)。不幸的是,在执行项目后(构建成功没有问题),我得到一个与缺少j2v8_android_x86库文件相关的异常。尝试创建V8运行时时出现问题:

V8 runtime = V8.createV8Runtime();

例外本身是:

Caused by: java.lang.IllegalStateException: J2V8 native library not loaded.
        at com.eclipsesource.v8.V8.checkNativeLibraryLoaded(V8.java:86)
        at com.eclipsesource.v8.V8.createV8Runtime(V8.java:74)
        at com.eclipsesource.v8.V8.createV8Runtime(V8.java:63)
        (...)
Caused by: java.lang.UnsatisfiedLinkError: Could not load J2V8 library. Reasons:
Couldn't load j2v8_android_x86 from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.androidscripting.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.androidscripting.app-1, /vendor/lib, /system/lib, /system/lib/arm]]]: findLibrary returned null
        at com.eclipsesource.v8.LibraryLoader.loadLibrary(LibraryLoader.java:71)
        at com.eclipsesource.v8.V8.load(V8.java:49)
        at com.eclipsesource.v8.V8.createV8Runtime(V8.java:72)
        ... 17 more

当我调查apk时,我会在apklibj2v8_android_armv7l.so libj2v8_android_x86.so 的根目录中看到两个库文件。如果我理解正确,那些文件的名称和位置是正确的,应该解决它们。

应用程序由Gradle 2.2.1Oracle JVM 1.8.0_45)编译和打包,Android SDK 19兼容性(语言级别支持1.7)并在Hudl2运行时执行Android 4.4.2

1 个答案:

答案 0 :(得分:3)

在与我的大学交谈后,我们找到了解决方案。路径类加载器实际上并不在apk的根目录下 - 而是在libs/[ARCHITECTURE]中查找。将libj2v8_android_x86.so文件移动到libs/x86并重新打包确实解决了问题。

我认为maven模块可能已经为旧版本打包,因此在构建时没有将它们复制到正确的目录中 - 或者可能只是配置错误。