gpt4 book ai didi

android - 无法在 Android 项目中加载预构建的 OpenSSL 库

转载 作者:行者123 更新时间:2023-11-30 16:13:10 27 4
gpt4 key购买 nike

我正在尝试链接 OpenSSL .so 预构建文件,以便我可以在 native 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 链接 native 文件:

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,但使用以下代码 fragment ,.so 文件是仍然失踪:

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

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

最佳答案

结果我的 jniLibs 的结构是这样的:

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

反对:

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

这解决了最初的问题。

关于android - 无法在 Android 项目中加载预构建的 OpenSSL 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com