После долгих исследований по этому вопросу, это рабочее решение с несколькими незначительными проблемами.
Проблема № 1:
Это должно сработать размещение файла libxyz.a lib и его каталога include в {папка AndroidStudioProjects} / {имя проекта} / app / libs , но для некоторых (пока неизвестно ) причина, в моей системе это никогда не работало так.
Мне удалось заставить его работать, поместив оба (файл lib и include dir) в: {папка AndroidStudioProjects} / {Имя проекта} / app / src / main / cpp / libs (который должен был быть создан).
Проблема № 2:
Я столкнулся с некоторыми 32-битными х 64-битными ссылками проблемы, так что в этот момент я отказался от "толстых APK" и оставил его только 32-битным.
Что я делал
On CMakeLists. txt add:
add_library(xyz STATIC IMPORTED)
set_target_properties(xyz PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libxyz.a)
И на target_link_libraries (в вашу общую нативную библиотеку) вы должны добавить ссылку "xyz":
target_link_libraries(
#the target shared lib:
native-lib
#other libs to link go here
xyz)
Extra:
Если вы хотите иметь возможность включать заголовки в libxyz.a в свой код C ++, используя по умолчанию include dir, например:
#inlcude <xyz.h>
You необходимо добавить его в CMakeLists.txt :
include_directories( ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include )
Сделать вывод только 32-битным
On build.gradle (Модуль: app) go в блок "android defaultConfig", прямо перед "externalNativeBuild" и добавьте ndk abiFilters:
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.your.project"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
Пожалуйста, не стесняйтесь улучшать это.