NDK – Как использовать сгенерированную библиотеку .so в другом проекте

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

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

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

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

Предположим, что ваша предварительно созданная библиотека называется 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 / … вот и все!

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

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

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

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

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