Я пытаюсь связать предварительно созданные файлы OpenSSL .so
, чтобы я мог использовать его в своих собственных файлах Си.В моем проекте я создал native_hello.c
файл, и он работает нормально, код C запускается, но когда я пытаюсь
System.loadLibrary("crypto");
System.loadLibrary("ssl");
в своем коде Java, чтобы загрузить файлы OpenSSL .so
приложение вылетает с ошибкой
java.lang.UnsatisfiedLinkError: dlopen failed: library "libcrypto.so" not found
Я продолжил работу и декомпилировал исходный apk-файл, и, конечно же, в папке lib
не было файлов libcrypto.so
или libssl.so
.Я использую CMake для связывания собственных файлов:
CMakeLists.txt
cmake_minimum_required(VERSION 3.6.0)
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/main)
add_library(lib_crypto SHARED IMPORTED)
set_target_properties(lib_crypto PROPERTIES IMPORTED_LOCATION ${distribution_DIR}/jniLibs/${ANDROID_ABI}/lib/libcrypto.so)
# add the open ssl lib
add_library(lib_ssl SHARED IMPORTED)
set_target_properties(lib_ssl PROPERTIES IMPORTED_LOCATION ${distribution_DIR}/jniLibs/${ANDROID_ABI}/lib/libssl.so)
add_library(native-test SHARED
${distribution_DIR}/jni/native_hello.c)
target_include_directories(native-test PRIVATE ${distribution_DIR}/jniLibs/${ANDROID_ABI}/include)
target_link_libraries(native-test
lib_crypto
lib_ssl)
В смежных вопросах одним из решений является использование sourceSets
в build.gradle
но со следующим фрагментом кода .so
файлы по-прежнему отсутствуют:
sourceSets {
main {
// let gradle pack the shared library into apk
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
Я думаю, что проблема довольно проста, но я не мог понять, как ее решить.Любая помощь будет оценена