链接第三方库(libs.a)与NDK

我正在构build一个使用第三方本地库的Android apk,这些库位于静态对象代码库(.a文件)中,我需要编写一个JNI包装来访问Java中的这些函数。

这些库已经使用交叉编译器进行编译,并且本地化为Android。

如何编译链接到.a库文件中的函数的JNI源代码?

这是我的Android.mk

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog LOCAL_MODULE := ndk1 LOCAL_SRC_FILES := native.c include $(BUILD_SHARED_LIBRARY) 

当我编译时,我只得到编译的native.c文件。

Solutions Collecting From Web of "链接第三方库(libs.a)与NDK"

要做到这一点。

我必须将这些库声明为模块。 如下所示。

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := curl LOCAL_SRC_FILES := libcurl.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY) 

在与此Android.mk文件相同的文件夹中有一个libcurl.a文件,以及包含头文件的/ include fodler。

现在在主模块中声明这个lib,Android NDK将负责其余的部分。

 LOCAL_PATH := $(call my-dir) include $(call all-subdir-makefiles) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog -ldl LOCAL_MODULE := rmsdk LOCAL_SRC_FILES := curlnetprovider.cpp native.c LOCAL_STATIC_LIBRARIES := curl include $(BUILD_SHARED_LIBRARY) 

请注意,在使用之前,您应该包含模块的Android.mk文件。 我通过调用all-subdir-makefiles来做到这一点。

你的库必须被编译为你的特定目标(Arm),为此,我认为你必须使用docs / STANDALONE-TOOLCHAIN.html(在你的ndk-r5文件夹中)描述的工具链。