3

我在 Android 应用程序中使用共享库 (.so) 时遇到了一些麻烦。我有3个项目:

  1. 本机代码项目 => 在 .so 库中构建 c++ 文件 我们称之为libNative.so

  2. Android 库项目 => 调用本机代码。该项目的输出是一个 .jar 文件。我们称之为“ stack.jar

  3. 使用 android 库项目的 Android 应用程序示例。

在示例应用程序 (3) 库的属性选项卡中,我将 stack.jar 文件配置为与 .so 库链接。我的 .so 本机库很好地包含在生成的 APK 中。=> Eclipse 将它复制到“ lib /armeabi”文件夹中。

如果我在手机上启动 APK,我会收到以下错误:

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libNative:
findLibrary returned null at
java.lang.Runtime.loadLibrary(Runtime.java:365) at
java.lang.System.loadLibrary(System.java:535)

我猜错误是 Eclipse 将 .so 库复制到 lib 文件夹而不是libs中,并且 System.loadLibrary 正在寻找路径libs/armeabi ...,对吗?或者我可能完全错了!

非常感谢你的帮助,

编辑:当我安装 APK 时,.so lib 很好地复制到data/data/mypackage/lib文件夹中。不过,我无法加载它。是因为加载发生在 .jar 文件中,而不是直接在应用程序示例中?

4

1 回答 1

3

根据您生成了一个名为libExample.so的动态库

  1. 将 libExample.so 放在项目的libs/armeabi文件夹中(如果不存在则创建它)
  2. 正如fadden所说,在一个类中编写以下代码:

    try
    {
        System.loadLibrary("Example");
    }
    catch (UnsatisfiedLinkError use)
    {
        Log.e("JNI", "WARNING: Could not load native library");
    }
    

    应该管用 !

于 2013-07-17T07:48:22.533 回答