Невозможно загрузить готовую библиотеку OpenSSL в проекте Android - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь связать предварительно созданные файлы 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']
    }
}

Я думаю, что проблема довольно проста, но я не мог понять, как ее решить.Любая помощь будет оценена

1 Ответ

0 голосов
/ 27 сентября 2019

Оказалось, что структура моих jniLibs была примерно такой:

arm64-v8a
    include
        ...
    lib
        libcrypto.so
        libssl.so
x86
    include
        ...
    lib
        ...

в противоположность:

arm64-v8a
    include
        ...
    libcrypto.so
    libssl.so
x86
    include
        ...
    ...

Что решает начальную проблему.

...