我正在构建一个Android apk,它使用第三方的一些本机库,这些库位于静态对象代码库(.a文件)中,我需要编写一个JNI包装器来访问Java这些函数。
这些库已经使用交叉编译器进行编译,并且原生于Android。
如何编译链接到.a libs文件中的函数的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文件。
答案 0 :(得分:11)
要做到这一点。
我必须将这些库声明为模块。如下所示。
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)
libcurl.a文件与此Android.mk文件位于同一文件夹中,而/ 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来做到这一点。
答案 1 :(得分:1)
你的libs必须为你的特定目标(Arm)编译,为此我认为你必须使用docs / STANDALONE-TOOLCHAIN.html(在你的ndk-r5文件夹中)中描述的工具链。