android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk项目开发使用

news/2024/10/10 18:14:53/文章来源:https://www.cnblogs.com/yongfengnice/p/18456883

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__=29
make	//执行完成之后在openssl-3.3.2目录下生成libcrypto.so和libssl.so两个so库和两个a库
  • 64位编译命令:
/Configure android-arm64 -D__ANDROID_API__=29
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}cryptossllog)
// 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 = trueproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")}}externalNativeBuild {cmake {path = file("src/main/cpp/CMakeLists.txt")version = "3.22.1"}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/811201.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL下载、安装与配置

MySQL下载、安装与配置下载MySQL 1、进入MySQL官网 2、点击 Products,再点击 MySQL Community Server3、选择MySQL版本,点击 Go to Download Page4、点击 Download 下载MySQL安装程序5、点击 No thanks, just start my download,等待下载安装MySQL 1、双击运行下载的安装程序…

web端ant-design-vue Upload 手动实现文件上传使用小节

web端ant-design-vue Upload 手动实现文件上传使用小节。最近在项目开发中用到了手动实现文件上传的组件,之前都是自动上传把返回的文件信息保存到服务器。手动上传相对复杂一下,我把遇到的一些问题整理记录一下,有需要的朋友可以避免走弯路! 1、文件上传需要用formdata格式…

记一次k8s挂载configmap配置文件识别为文件夹的错误

错误表现 挂载.env为配置文件时被识别成一个文件夹而不是一个文件错误原因 创建configmap的时候原始文件使用的是env解决方式 创建configmap的时候需要使用的文件需要修改文件名为挂载的文件名一致 例如本次挂载的文件名是.env则需要在创建configmap的时候原始文件名修改为.evn…

开源项目更新|WPF/Uno Platform/WinUI 3三个版本的《英雄联盟客户端》

为了统一WPF/WinUI3/Uno仓库的项目架构,我们基于.NET Standard 2.0设计了一个可在所有平台上运行的框架,无需依赖第三方库。这个框架直接实现了项目分散化、模块化、视图注入、依赖注入、单例模式和MVVM等基于XAML的项目架构所需功能。采用这种方法,我们可以在不同版本(如WPF、…

简明线性回归算法中的最小二乘法

我们来通过一个具体的例子说明线性回归算法中最小二乘法如何确定模型参数。 示例:房价预测 假设我们想用房子的面积(平方英尺)来预测房价(美元)。我们有以下数据集:面积(平方英尺)房价(美元)800 150,0001000 200,0001200 210,0001500 280,0001. 建立模型 我们假设房价…

简明线性回归算法

线性回归是一种用于预测和建模的统计方法,旨在通过建立输入变量(特征)与输出变量(目标)之间的线性关系来进行分析。下面我们通过一个简单易懂的例子来说明线性回归的详细过程。 例子:预测房价 假设你是一名房地产经纪人,想要根据房子的面积(平方英尺)来预测房子的价格…

web端ant-design-vue Modal.info组件自定义icon和title使用小节

web端ant-design-vue Modal.info组件自定义icon和title整理小节,最近在项目中用到了自定义icon和title的功能,经过测试发现,如果自定义icon title会自动换行,尝试直接修改样式和穿透方式都没有效果,最后采取了一个巧妙的方式,将icon和title放在一个自定义组件内,完美解决…

Ewald求和在分子静电势能计算中的应用

本文介绍了Ewald求和计算方法在周期性边界条件下计算静电势能的方法。周期性的静电势函数并不是一个空间收敛的函数,通过Ewald求和可以将静电势切分为短程相互作用和长程相互作用,两项分别在实空间和倒易空间(或称傅里叶空间、k空间等)收敛。然后就可以进一步进行截断,用更…

vue3中使用markdown并且显示公式

vue3中使用markdown并且显示公式 最终效果如图 下面是代码 1.先安装依赖包npm install markdown-it mathjax2.src下面创建文件utils/mathjax.js,文件内容如下window.MathJax = {tex: {inlineMath: [["$", "$"],["\\(", "\\)"],[&q…

洛谷题单指南-字符串-P1481 魔族密码

原题链接:https://www.luogu.com.cn/problem/P1481 题意解读:在n个字符串中找到最长的词链长度,定义字符串a、b、c可以形成词链,即a是b的前缀、b是c的前缀。 解题思路: 1、Trie树定义 Trie树,也称前缀树、字典树,核心思想是将字符串拆解为单个字符,每个字符是树的一条边…

解决使用Navicat连接数据库时,打开数据库表很慢的问题

今天使用Navicat连接数据库时,发现不管表中数据多少,打开数据库表非常慢。 解决方法: Navicat - 右键编辑数据库连接 - 高级 - 勾选保持连接间隔 - 输入框设置为20 - 点击确定! 参考文章:https://51.ruyo.net/14030.html

2024.9.28 模拟赛 CSP6

模拟赛 单 \(log\) 双 \(log\) 不如三 \(log\)。 T1 一般图最小匹配 简单 dp,水。\(O(n^2)\) 其实也是可反悔贪心的板子,可以 \(O(n\log(n))\) 做。 考虑排序后求差分数组,就变成不能选相邻的。然后就是可反悔贪心板子。 用双向链表(记录前驱后继)维护,然后放进堆里。 板…