本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.
操作系统:
WSL Ubuntu 20
准备工作空间:
cd ~
mkdir workspace
cd workspace
下载适用于 Linux 的 NDK r21d
wget https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip
unzip android-ndk-r21d-linux-x86_64
NDK 官网下载地址: https://developer.android.google.cn/ndk/downloads?hl=zh-cn
历史版本下载地址: https://developer.android.google.cn/ndk/downloads/revision_history
下载 OpenSSL 1.1.1i 源码
wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz
tar zxf openssl-1.1.1i.tar.gz
OpenSSL 官网下载地址: https://www.openssl.org/source/
历史版本下载地址: https://github.com/openssl/openssl/releases
交叉编译 OpenSSL for Android
https://wiki.openssl.org/index.php/Android 上的的步骤已经过时了. (#7578)
参考 https://github.com/openssl/openssl/blob/master/NOTES-Android.md.
针对高版本的 NDK 需要执行以下指令:
# 高版本 NDK 不再包含 gcc, 因此需要将 NDK 内置的 clang 纳入 PATH 环境变量
export ANDROID_NDK_HOME=$PWD/android-ndk-r21d
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PASH
export PATH=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
cd openssl-1.1.1i
# 清理 make 产物, 以免受缓存影响导致编译出错
make clean
# 生成最低支持 api 到 21 的 arm64 架构的 Makefile
./Configure android-arm64 -D__ANDROID_API__=21
# 执行编译
make
指令执行完毕时即可在 /workspace/openssl-1.1.1i/
目录下找到 libssl.a libcrypto.so 等产物.
通过执行 ./Configure
可以看到所有受支持的架构, 其中 Android 平台可用的架构包括:
android-arm android-arm64 android-armeabi android-mips
android-mips64 android-x86 android-x86_64 android64
android64-aarch64 android64-mips64 android64-x86_64