在libs Android中使用.so文件时找不到本机方法

时间:2014-01-15 08:08:29

标签: android android-ndk

我有.so文件,我使用c库创建。现在我想在另一个项目中使用.so文件来调用这些函数。我不知道如何使用该库。如何调用该库中的任何函数?我已经尝试但发现错误,因为没有找到Native方法。我是一个初学者,在android.any帮助这个Ndk .. ??

我已经提到了许多链接,那些没有解决我的问题 Native method not found

java.lang.UnsatisfiedLinkError: Native method not found

我面对的是这个链接,但没有答案。链接是 Need NDK Help: How to call a C++ function for shared library from another project that uses C++

我的Android.mk文件如下所示,我创建了.so文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := ShairportSample
LOCAL_SRC_FILES := ShairportSample.cpp
APP_PLATFORM := android-19
include $(BUILD_SHARED_LIBRARY)

2 个答案:

答案 0 :(得分:0)

你可以调用你希望从另一个NDK lib重用的.so中实现的函数,将它设置为预建的共享库,取决于你的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := ShairportSample
LOCAL_SRC_FILES := libs/$(TARGET_CPU_ABI)/libShairportSample.so
LOCAL_EXPORT_C_INCLUDES := PATH_TO_ShairportSample.h
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := yournewlib
LOCAL_SRC_FILES := yournewlib.cpp
LOCAL_SHARED_LIBRARIES += ShairportSample
include $(BUILD_SHARED_LIBRARY)

从Java代码中,您必须在加载newlib之前从Java加载ShairportSample lib。

否则,如果要直接从Java重用.so,则应导出使用它的Java库(.jar)。然后,您可以从其他项目重用此Java库。

答案 1 :(得分:0)

  1. 首先,你应该确保正确编译.so文件,将其命名为libYourLibName.so,将其放入libs / armeabi文件夹。

  2. 其次,确保已从静态块

  3. 加载.so文件
      

    static {       的System.loadLibrary( “YourLibName”);   }

    这可能会对你有所帮助