Я создал проект студии Android с поддержкой C++ и установил собственный комплект разработки и другие необходимые инструменты. Как импортировать другую предварительно созданную собственную библиотеку для включения в код C++. Я хочу сделать что-то подобное

Я отредактировал cmakelist.txt, как указано ниже, и теперь он показывает общую библиотеку в папке cpp.

cmake_minimum_required(VERSION 3.4.1)
set(distribution_DIR ${CMAKE_SOURCE_DIR}/../../../../distribution)
add_library(lib_gmath STATIC IMPORTED)
set_target_properties(lib_gmath PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/gmath/lib/${ANDROID_ABI}/libgmath.a)
add_library(lib_gperf SHARED IMPORTED)
set_target_properties(lib_gperf PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libgperf.so)
add_library(lib_ocr SHARED IMPORTED)
set_target_properties(lib_ocr PROPERTIES IMPORTED_LOCATION
${distribution_DIR}/ocr/lib/${ANDROID_ABI}/libLPROCR.so)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
add_library(hello-libs SHARED
hello-libs.cpp)
target_include_directories(hello-libs PRIVATE
${distribution_DIR}/gmath/include
${distribution_DIR}/gperf/include)
target_link_libraries(hello-libs
android
lib_gmath
lib_gperf
lib_ocr
log)
Но я не могу включать классы из этой предварительно созданной библиотеки в свой код на C++.
@RichardCritten Я уже читал это несколько раз, но не понимаю. В нем говорится, что дайте модулю имя, а затем отредактируйте модуль android.mk, но я не вижу ничего подобного в структуре проекта.
Вы ищете открытый API libLPROCR.so?
@AlexCohn Да, наверное, исходники.
Как вы думаете, чем может быть полезна эта библиотека?
Я должен здесь упомянуть несколько вещей.
gradle+clang для сборки вашего кода. Android.mk как-то стареет, и лучше использовать более новые системы сборки, если вы начинаете новый проект.Если вы используете gradle+cmake, вот простой файл CMakeLists.txt для ваших готовых библиотек:
cmake_minimum_required(VERSION 3.4.1)
add_library( core-api
SHARED
src/main/cpp/mysource.c )
# prebuilt libraries
add_library( crypto-lib
STATIC
IMPORTED )
set_target_properties( crypto-lib
PROPERTIES IMPORTED_LOCATION
${CMAKE_CURRENT_SOURCE_DIR}/../prebuilt/crypto/${ANDROID_ABI}/lib/libcrypto.a )
include_directories( src/main/cpp/
../prebuilt/crypto/common/include/
../prebuilt/crypto/${ANDROID_ABI}/include/ )
# other libraries
find_library( log-lib
log )
target_link_libraries( core-api
crypto-lib
${log-lib} )
И это файл gradle, который использует этот CMakeLists.txt:
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.sdkVersion
defaultConfig {
minSdkVersion 14
targetSdkVersion 27
externalNativeBuild {
cmake {
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
cFlags "-D__STDC_FORMAT_MACROS", "-fno-integrated-as"
}
}
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
externalNativeBuild {
cmake {
cFlags "-Wall","-DDEBUG"
}
}
debuggable true
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
Я использую gradle + cmake и отредактировал cmakelist.txt, похожий на ваш. Я вижу готовую библиотеку в папке cpp, помеченной как общая библиотека. Готовая библиотека отлично работает в других проектах. Но как использовать этот код библиотеки в моем коде на C++? я не могу включать файлы. У меня нет заголовочного файла, а есть только файл .so.
Вам действительно нужно включать заголовки. если вы экспортировали класс C++, вы не сможете найти классы без файлов заголовков. вы можете найти экспорт C, если точно знаете имя, но для C++ вы почти не можете (это будет очень сложно). если ваша предварительно созданная библиотека является общей, вам нужно использовать add_library(crypto-lib SHARED IMPORTED), и другие настройки, я думаю, должны быть аналогичными.
Хорошо спасибо. У меня нет заголовков include, а есть только файл .so. Я посмотрю в Интернете, если смогу найти исходный код этой предварительно созданной библиотеки.
Это задокументировано здесь: developer.android.com/ndk/guides/prebuilts