Android openssl3.0.x编译和使用
1、前提准备
编译需要在linux环境下进行,笔者使用的是vmware虚拟机安装ubuntu 20.04进行编译,虚拟机的安装和ubuntu的安装这里就不详细说明了,可自行百度。
2、编译环境
openssl编译需要提前安装所需要的环境,这一点在openssl官网文档中有说明。Android编译说明openssl/NOTES-ANDROID.md at master · openssl/openssl · GitHub,下面直接给出需要安装的环境
sudo apt update
sudo apt upgrade
sudo apt install make
sudo apt install build-essential
sudo apt install perl
3、开始编译
在编译前还需要下载Android NDK和openssl,下载然后解压。
wget https://www.openssl.org/source/openssl-3.0.5.tar.gz
tar -zxvf openssl-3.0.5.tar.gz
wget https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip
unzip android-ndk-r22b-linux-x86_64.zip
编译openssl,此前笔者使用的是DNK-r20b编译的,开始在Android Studio上使用的是DNK 21版本进行开发,打包没出现问题,但后面升级到NDK 22+后出现无法打包的情况。 根据提示编译需要添加 -fPIC ,在此记录一下。
export ANDROID_NDK_ROOT=/home/wgc/Android/android-ndk-r22b
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
./Configure android-arm64 -D__ANDROID_API__=21 -static no-shared no-tests -fPIC --prefix=${OUTPUT_PATH}
make && make install
4、一键编译
以上只是编译一个架构的静态库,如果需要其他架构还需重复编译,不够便捷,这里提供一个一键编译的版本。新建一个 build_openssl3.x.sh的文件,将以下内容复制到文件中,然后用命令执行 sh build_openssl3.x.sh即可。
#!/bin/bash -e
sudo apt update
sudo apt upgrade
sudo apt install make
sudo apt install build-essential
sudo apt install perl
#编译修改下面四个属性开始
OPENSSL_VERSION=3.0.5
#NDK23及以后下载和解压需要修改,注意下面注释掉的内容和说明
NDK_VERSION=android-ndk-r22b
ANDROID_TARGET_API=21
#需要编译的架构 如果执行报数组错误 请使用 sudo dpkg-reconfigure dash 出现画面选择 否
ANDROID_ABI_ARRAY=(armeabi armeabi-v7a arm64-v8a x86 x86_64) #所有架构(armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64)
#编译修改下面四个属性结束
WORK_PATH=$(cd "$(dirname "$0")";pwd)
ANDROID_NDK_PATH=${WORK_PATH}/${NDK_VERSION}
OPENSSL_SOURCES_PATH=${WORK_PATH}/openssl-${OPENSSL_VERSION}
if [ ! -e openssl-${OPENSSL_VERSION}.tar.gz ]
then
echo "openssl 压缩包不存在"
wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
fi
if [ ! -d openssl-${OPENSSL_VERSION} ]
then
echo "openssl 目录不存在"
tar -zxvf openssl-${OPENSSL_VERSION}.tar.gz
fi
if