链接第三方库(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文件。

  • Android NDK R8E缺lessstdlib.h
  • Android ICS 4.0 NDK NewStringUTF崩溃了应用程序
  • Android添加本地支持 - 无法parsing的jni.h,android / log.h等
  • 从Android JNI的任何线程的FindClass
  • 如何在Android Studio 2.2 Preview 1中正确使用NDK-Build
  • Android的JNI没有包装在APK中
  • 链接到共享库时防止将函数从静态库中剥离?
  • 获取有效的JNIEnv指针
  • 要做到这一点。

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

     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文件夹中)描述的工具链。