java - 未从 cordova apk 加载 native 库

标签 java android cordova java-native-interface cordova-plugins

我正在制作一个 cordova 插件,它将是 .jar 文件及其两个 .so 依赖项的简单包装器。我之前已经在 Android Studio 的普通 Android 应用程序中尝试过。通过将 native 库复制到 jniLibs/armeabi 文件夹中并将 jar 文件复制到 libs/中,效果非常好。

在 cordova 插件中,我制作了相同的文件夹结构,并且所有内容都位于同一个位置。在plugin.xml中,我将这两个文件复制到libs/armeabi中,这是有效的,因为如果我查看apk,它们位于“正确”文件夹中。

但是当我尝试使用 cordova 应用程序中的插件时,它会在尝试调用 native 库时抛出 UnsatisfiedLinkError :

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.ionicframework.*******-2/base.apk"],nativeLibraryDirectories=[/data/app/com.ionicframework.*******-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libjni.so"
W/System.err( 4224):    at java.lang.Runtime.loadLibrary(Runtime.java:366)
W/System.err( 4224):    at java.lang.System.loadLibrary(System.java:988)
W/System.err( 4224):    at *******.<clinit>(ComIO.java:407)
W/System.err( 4224):    at *******.<init>(Printer.java:33)
W/System.err( 4224):    at net.terbe.dev.cordova.*******.print(*******.java:54)
W/System.err( 4224):    at *******.cordova.*******.execute(*******.java:42)
W/System.err( 4224):    at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
W/System.err( 4224):    at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
W/System.err( 4224):    at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
W/System.err( 4224):    at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
W/System.err( 4224):    at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err( 4224):    at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
W/System.err( 4224):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err( 4224):    at android.os.Looper.loop(Looper.java:135)
W/System.err( 4224):    at android.os.HandlerThread.run(HandlerThread.java:61

我应该在哪里复制这些库?

最佳答案

我最近需要交叉编译一个 C 库以在 Cordova 应用程序中使用,因此根据该经验,我创建了一个 example Cordova plugin以及相应的test app that uses it .

如果你看看我的plugin.xml您会看到我还将 armeabi 库以及其他架构的其他库复制到 /libs/armeabi。 该插件肯定可以工作(您可以尝试一下),因此希望您可以将其用作工作引用。

愚蠢的问题:您不复制armeabi 库吗?因为我很确定大多数现代 Android 设备不支持该功能 (ARMv5/ARMv6),并且需要 armeabi-v7a 位于 /libs/armeabi-v7a 中。 .

关于java - 未从 cordova apk 加载 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072520/

相关文章:

android - 如何在使用 phonegap 的 Android 应用程序中的 jquery 组合框中使用动态源

java - 推荐从 Jersey 开始的 Maven 原型(prototype)

java - JDBC - 在准备好的语句中使用 sysdate 会产生错误

Android - 如何以编程方式跟踪设备上任何正在运行的应用程序的内存使用情况?

java - ruby 到 android 3DES 加密 - 填充 block 损坏

android - 落在我松开手指的地方

android - 使用 Phonegap 存储行驶距离

android - Phonegap 应用程序启动期间的启动画面

java - 如何在 Linux 上使用用户名和密码连接到我的 mysql 数据库

java - 在运行时更改 Autowiring 对象