NDK - Как использовать сгенерированную библиотеку .so в другом проекте - PullRequest
43 голосов
/ 15 апреля 2011

Я успешно использовал ndk для создания и использования файла .so в одном проекте.Мне нужно использовать эту библиотеку в другом проекте.Я бы предпочел не копировать исходный код, а просто использовать библиотеку.

Попытка скопировать и вставить целое libs/armeabi/libcommon.so в корень проекта не работает, я думаю, потому что libs/armeabi - это путь, сгенерированный Android.

Так что будет лучшим способомсделать это?

Я использую Eclipse-Galileo & ndk5.

Ответы [ 3 ]

44 голосов
/ 20 апреля 2011

Существует гораздо более простой способ сделать все это.

Предположим, что ваша предварительно собранная библиотека называется "libprebuilt.so"

В папке проекта нового проекта, в которую вы хотите включить только готовую библиотеку, выполните что-то вроде:

mkdir -p jni/libprebuilt
cp libprebuilt.so jni/libprebuilt

Затем просто создайте файл jni / libprebuilt / Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libprebuilt
LOCAL_SRC_FILES := libprebuilt.so
include $(PREBUILT_SHARED_LIBRARY)

Затем, когда вы выполните ndk-build, она скопирует эту библиотеку в libs / armeabi / ...это все!

20 голосов
/ 20 апреля 2011

Я нашел способ сделать это, поэтому разместил его здесь на случай, если кто-то столкнется с ним.

  1. Код для совместного использования (включая оболочку Java JNI, собственный код.so библиотека), должен быть в отдельном проекте.Преобразуйте это в проект библиотеки, щелкнув правой кнопкой мыши на имени проекта -> свойства -> свойства Android -> галочку «Есть библиотека».Этот проект не может быть выполнен сейчас, но на него могут ссылаться другие проекты.

  2. В проекте, который будет использовать общий объект, добавьте ссылку на проект Libarray, щелкнув правой кнопкой мыши на имени проекта-> свойства -> свойства Android -> библиотека / «Добавить».Это должно показать проект библиотеки, созданный на предыдущем шаге.Выберите его.

Теперь можно легко ссылаться на .so между различными проектами.

7 голосов
/ 15 апреля 2011

В именах всех функций JNI (Native Interface) есть имя пакета (например, JNIEXPORT void JNICALL Java_com_myapp_myclass_funct).Так что я думаю, вы должны переименовать эти функции в библиотеке и перекомпилировать его.Или, может быть, использовать его в качестве внешнего пакета в вашем приложении.

...