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

在Android应用程序中加载本机库时出错,android,android-ndk,java-native-interface,loadlibrary,Android,Android Ndk,Java Native Interface,Loadlibrary,我在Android应用程序中使用共享库(.so)时遇到了一些问题。 我有3个项目: < L> >本地代码Project = >在.so中构建C++文件 让我们称之为libNative.so Android库项目=>调用本机代码。这个项目的输出是一个.jar文件。 让我们称之为“stack.jar” 使用Android库项目的Android应用程序示例 在示例应用程序(3)库的属性选项卡中,我将stack.jar文件配置为与.so库链接。My.so本机库很好地包含在生成的APK中。 =>Eclip

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

< L> >本地代码Project = >在.so中构建C++文件 让我们称之为libNative.so

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

  • 使用Android库项目的Android应用程序示例

  • 在示例应用程序(3)库的属性选项卡中,我将stack.jar文件配置为与.so库链接。My.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库被很好地复制到data/data/mypackage/lib文件夹中。但我还是装不进去。是因为加载发生在.jar文件中,而不是直接发生在应用程序示例中吗???

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

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

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


  • 您可以尝试使用ndk toolsPaste将代码包含到加载库中。顺便说一句,库应该在libs文件夹中。只需执行一个简单的操作:static{System.loadLibrary(“libNative”);}私有静态本机字符串myMethod(intp1,intp2);在我的项目中,我的libs(.so和.jar)已经在libs文件夹中。要加载“libfoo.so”,您需要
    loadLibrary(“foo”)
    。因此,听起来您需要将“libNative”更改为“Native”。另外,如果实际的
    dlopen()
    调用失败,您将在logcat输出中的异常上方看到一个错误。还可以查看生成的存档的内容。这应该在bin子目录中。键入“aapt列表”。这就是上传到您设备的内容。你应该看到你的。所以在那里。嗨,有没有办法在Android库项目中调用这个?有什么办法吗?我不知道你想要什么。是否在Android库项目中包含动态库?JNI?