Android Studio объединяет встроенную библиотеку в APK

#android #c #android-studio #cmake #android-ndk

#Android #c #android-studio #cmake #android-ndk

Вопрос:

Я использую Android Studio для создания собственного проекта на C . Существует библиотека зависимостей (назовем ее lib.so ), который должен быть связан с библиотекой JNI для разрешения нескольких его символов. Однако я не хочу, чтобы эта библиотека была включена в APK, поскольку это заглушенная библиотека, которая будет использоваться только для целей связывания. Правильное lib.so с правильными определениями символов уже присутствует на устройстве Android, где я хочу запустить встроенный APK.

Я импортирую заглушенную библиотеку lib.so быть связанным с библиотекой JNI как:

add_library(ИМПОРТИРОВАННАЯ ОБЩАЯ библиотека) set_target_properties(lib.so ИМПОРТИРОВАННЫЕ СВОЙСТВА_LOCATION «location_of_lib.so «)

add_dependencies(native-jni lib}) target_link библиотеки (native-jni lib)

Таким образом, компиляция APK проходит успешно, но библиотека подключается к APK.

Я использую AS 4.0.1, NDK r19c, CMake 3.17. Тот же проект, который использовался для работы, как ожидалось, т. Е. Не Объединял библиотеку lib.so с APK, но каким-то образом он начал связывать его. Любые рекомендации по отладке этой проблемы будут оценены.

Ответ №1:

Попробуйте использовать find_library для этого. Поместите свой готовый lib.so (по крайней мере, плохое имя liba.so ) в какой-то путь и добавьте его в CMAKE_FIND_ROOT_PATH :

 list(APPEND CMAKE_FIND_ROOT_PATH ${PREBUILT_LIBS_DIR}/${ANDROID_PLATFORM}/${ANDROID_ABI}/a)
  

пример, как это может выглядеть:

 ~/my-proj/prebuilt-libs/android-28/x86/a/lib/liba.so
  

Затем найдите библиотеку и свяжите ее:

 find_library(lib-a a)
target_link_libraries(native-jni lib-a)