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 @ 2024-10-10 18:13  yongfengnice  阅读(354)  评论(0编辑  收藏  举报