android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk项目开发使用
openssl编译
本篇文章的操作是在Linux环境之下,在虚拟机ubuntu 20版本上操作的步骤
1. openssl下载解压tar包
-
openssl下载地址:https://openssl-library.org/source/
-
下载完解压:
tar -zxvf openssl-3.3.2.tar.gz
// 我这里下载openssl-3.3.2.tar.gz版本
2. 编译openssl库,得到libcrypto.so和libssl.so两个so库
-
来到openssl目录下:
cd /home/ubuntu20/documents/openssl/openssl-3.3.2
-
源代码目录openssl-3.3.2下有NOTES-ANDROID.md说明文档,有详细的Android配置环境和编译命令说明
-
配置ndk环境,我这里使用的ndk版本是21.4.7075529:
export ANDROID_NDK_ROOT=/home/ubuntu20/Android/Sdk/ndk/21.4.7075529
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
- 32位编译命令:
./Configure android-arm -D__ANDROID_API__=21
make clean //先清除之前的构建产物
make //执行完成之后在openssl-3.3.2目录下生成libcrypto.so和libssl.so两个so库和两个a库
- 64位编译命令:
/Configure android-arm64 -D__ANDROID_API__=21
make clean //先清除之前的构建产物
make //执行完成之后在openssl-3.3.2目录下生成libcrypto.so和libssl.so两个so库和两个a库
3. 将libcrypto.so和libssl.so两个so库整合到android ndk项目
- 创建一个android ndk项目,然后将libcrypto.so和libssl.so两个so库以及include文件拷贝到项目里,配置如下截图所示
# CMakeLists.txt添加的内容
message("hello,1234")
#PROJECT_SOURCE_DIR==D:/work/androidcpp/app/src/main/cpp
include_directories("${PROJECT_SOURCE_DIR}/submodule/openssl3.3.2/include")
#CMAKE_SOURCE_DIR==D:/work/androidcpp/app/src/main/cpp
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")
target_link_libraries(${CMAKE_PROJECT_NAME}
crypto
ssl
log)
// build.gradle的写法
android {
defaultConfig {
externalNativeBuild {
cmake {
cppFlags += "-std=c++11"
}
}
ndk {
abiFilters.clear()
abiFilters.addAll(arrayOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) //这里指定的是源代码编译要支持编译出哪些架构的so库,一般支持"armeabi-v7a", "arm64-v8a"两个即可
}
}
buildTypes {
debug {
ndk {
abiFilters.clear()
abiFilters.addAll(arrayOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) //这里指定的是debug打包时要打包哪些架构的so库进apk里面,一般支持"armeabi-v7a", "arm64-v8a"两个即可
}
isMinifyEnabled = false
}
release {
ndk {
abiFilters.clear()
abiFilters.addAll(arrayOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) //这里指定的是release打包时要打包哪些架构的so库进apk里面,一般支持"armeabi-v7a", "arm64-v8a"两个即可
}
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)
}
}
externalNativeBuild {
cmake {
path = file("src/main/cpp/CMakeLists.txt")
version = "3.22.1"
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2019-10-10 android开发startActivityForResult从系统自带的文件管理器文件选择兼容各个版本