Связь сторонних библиотек (libs.a) с NDK - PullRequest
8 голосов
/ 30 декабря 2010

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

Эти библиотеки уже скомпилированы с помощью кросс-компилятора и изначально созданы для 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.

Ответы [ 2 ]

11 голосов
/ 10 января 2011

Для этого.

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

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 с заголовками.

Теперь в основном модуле просто объявите 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 голос
/ 30 декабря 2010

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

...