2010-12-30 5 views
7

Я создаю Android apk, который использует некоторые собственные библиотеки третьей стороны, эти библиотеки находятся в библиотеке статических объектов (файлы .a), и мне нужно написать JNI wrapper для доступа в Java этих функций.Связывание сторонних библиотек (libs.a) с NDK

Эти библиотеки уже скомпилированы с использованием кросс-компилятора и предназначены для Android.

Как скомпилировать источники JNI, ссылающиеся на функции в файлах .a libs?

Это мой 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 файл компилируется.

ответ

10

Для этого.

Я должен объявить эти библиотеки как модули. Как и следующее.

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 и/включают 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-make-файлов.

+2

Также работает с общими библиотеками (* .so). Например, я просто «adb pull /system/lib/libsqlite.so» для ссылки на sqlite. –

+0

Я пробую разные способы, но я не могу найти ответ, пожалуйста, помогите http://stackoverflow.com/questions/7332679/cant-create-shared-library-with-static-inside –

+0

@Marcos первый - это отдельный make-файл? если так, где вы должны добавить его, и я не вижу ссылку на первый make-файл во второй части? – jxgn

1

Ваши библиотеки должны быть скомпилированы для вашей конкретной цели (Arm), для этого я думаю, что вам нужно использовать инструментальную цепочку, как описано в docs/STANDALONE-TOOLCHAIN.html (в папке ndk-r5).

+2

Библиотеки уже скомпилированы для конкретной руки с использованием кросс-компиляторов. –

Смежные вопросы