在Android应用程序中加载本机库时出错

时间:2013-07-16 10:21:23

标签: android android-ndk java-native-interface loadlibrary

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

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

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

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

  4. 在示例应用程序(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文件中而不是直接发生在应用程序示例中吗?

1 个答案:

答案 0 :(得分: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");
    }
    

    应该有效!