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

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__=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"
      }
    }
}
posted @   yongfengnice  阅读(738)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2019-10-10 android开发startActivityForResult从系统自带的文件管理器文件选择兼容各个版本
点击右上角即可分享
微信分享提示