【问题标题】:Cannot load prebuilt OpenSSL library in Android project无法在 Android 项目中加载预构建的 OpenSSL 库
【发布时间】:2020-01-27 06:42:50
【问题描述】:

我正在尝试链接 OpenSSL .so 预构建文件,以便可以在我的本机 C 文件中使用它。在我的项目中,我创建了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.solibssl.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)

在相关问题中,解决方案之一是在build.gradle 中使用sourceSets,但使用以下代码sn-p 仍然缺少.so 文件:

sourceSets {
    main {
        // let gradle pack the shared library into apk
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

我认为这个问题很简单,但我不知道如何解决它。任何帮助将不胜感激

【问题讨论】:

    标签: android c cmake openssl native


    【解决方案1】:

    原来我的 jniLibs 的结构类似于:

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

    反对:

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

    这解决了最初的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多