首页 > 其他分享 >android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk项目开发使用

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

时间:2024-10-10 18:12:56浏览次数:13  
标签:ndk x86 openssl so android 源代码 ANDROID

openssl编译

本篇文章的操作是在Linux环境之下,在虚拟机ubuntu 20版本上操作的步骤

1. openssl下载解压tar包

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}
        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"
      }
    }
}

标签:ndk,x86,openssl,so,android,源代码,ANDROID
From: https://www.cnblogs.com/yongfengnice/p/18456883

相关文章

  • Socrates
     1.Socrates,agreatphilosopherinancientGreece,ishailedasthe"FatherofWesternPhilosophy".Headvocatedexploringtruththroughdialogueandquestioning."Knowthyself"ishisfamousphilosophicalmanifesto.Histhoughtsan......
  • Linux中提示:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found 的解决
    一、查看gcc版本中包含哪些库#1.终端中输入如下命令:strings/usr/lib64/libstdc++.so.6|grepGLIBC#2.显示如下:===============================================GLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBC......
  • 【项目实战】g-sensor输出的gyro数据值没有变化
    项目场景:GR5515sensorhubSDK 与master 展锐W307(UWS6130E)通过串口通讯。问题描述量产的设备,概率性出现以下问题:G-SENSOR输出的gyro数据值没有变化,始终是一组一样的值。G-SENSOR型号为icm-42670-p。规格书已上传。正常的设备是有变化的。参考下图,对比异常设备却是......
  • 【状态估计】基于FOMIAUKF、分数阶模块、模型估计、多新息系数的电池SOC估计研究(Matla
    目录......
  • [Java/Spring] 深入理解 : Spring BeanFactory / ApplicationContext、Environment、P
    PropertySource:解析环境资源及配置的底层组件org.springframework.core.env.PropertyResolverEnvironment:管理环境的配置与资源org.springframework.core.env.Environment其继承接口PropertyResolver属性解析器,用来解析不同属性源PropertySource里的key......
  • VMware ESXi 8.0d 发布下载 - 领先的裸机 Hypervisor
    VMwareESXi8.0d发布下载-领先的裸机HypervisorESXi8.0标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)OEM定制版请访问原文链接:https://sysin.org/blog/vmware-esxi-8/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwareESXi:专门构建......
  • Android:H2-20:水平仪
    任务描述这里介绍的水平仪就是那种比较传统的水平仪,在一个透明的圆盘中充满某种液体,液体中留有一个气泡,当一端翘起时,该气泡将会浮向翘起的一端。该程序用了一个自定义View,该自定义View很简单,就是绘制透明圆盘和气泡——其中气泡的位置会动态改变。在真机中测试该程序,可看到......
  • socket tcp断线重连
    一、网上常用方法1、当Socket.Conneted==false时,调用如下函数进行判断点击(此处)折叠或打开///<summary>///当socket.connected为false时,进一步确定下当前连接状态///</summary>///<returns></returns>private bool IsSocketConnected(){    #region remar......
  • Python 处理 JSON 格式数据
    Author:ACatSmilingSince:2024-10-09需求:将文件中的JSON格式数据,指定Key的值替换。对于文件的整个文本为JSON格式的数据。示例:{'A':{'a':23.45,'b':56.78,'c':89.01}}Python代码:importjson#读取原始JSON数......
  • import mindnlp报错:OSError: cannot load library ‘libsndfile.so‘: libsndfile.so:
    在启智平台AI调试环境下,安装mindnlp后,importmindnlp报错。安装mindnlp命令:#安装mindnlp的daily包,待正式发布后可改为直接安装mindnlp包!pipinstallhttps://mindspore-courses.obs.cn-north-4.myhuaweicloud.com/mindnlp/mindnlp-0.4.0-py3-none-any.whl-ihttps://pypi.......