稍微记录下吧。
所需工具:
- Android NDK
- MSYS2
NDK
首先 NDK 肯定是要的,有两种 NDK。
第一种是通过 sdkmanager
安装的 NDK,安装路径一般在 Sdk/ndk/<ver>
这种。
第二种是直接单独下载的 NDK,目录名字一般是 android-ndk-r25
这种。
两种没区别,只不过是路径上的问题。
MSYS2
作为一个能偷懒就偷懒的人来说,能不使用 MSYS2 就能完成编译是最好不过的,然而事实上因为 perl
的问题,还是得借助 MSYS2。
openssl
的配置脚本是用 perl
写的,里面用正则的方式去匹配 NDK 路径。总所周知,Windows 平台的路径分隔符是反斜线 \
,而 Linux 等平台的是 /
。Windows 上的 perl 返回的路径里面是 /
,而且还有 DOS 8.3
短文件名的问题,总之就是没办法通过匹配,找到正确的编译器。
折腾了半天,尝试修改脚本,最后放弃了。
安装好 MSYS2 后已经自带了 perl
,但是没有自带 make
,需要自己装一下
pacman -Sy make
然后就没有然后了。
编译
先进入 MSYS2 的环境。
第一步首先设置 NDK 的路径,如果是要编译 openssl 3.0 之前的版本,需要设置的环境变量是 ANDROID_NDK_HOME
。
export ANDROID_NDK_HOME=/<ndk path>
ndk 的路径就是最上面提到的,通过 sdkmanager
安装的版本路径是包含具体版本号的,例如 22.1.7171670
这种,例如
export ANDROID_NDK_HOME=/c/Users/xxx/AppData/Local/Android/Sdk/ndk/22.1.7171670
如果是单独下载的 NDK,路径直接就是解压出来的就行。
如果编译的是 3.0 的版本,环境变量名字改成了 ANDROID_NDK_ROOT
,其他的都是一样的。
第二步设置 PATH,让 Configure
脚本能够找到编译器的位置。
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH
或者根据版本的不同是
export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH
然后就可以运行配置脚本了。
perl ./Configure android-arm64
默认选用最高 SDK 版本,也可以自己手动指定,-D__ANDROID_API__=24
perl ./Configure android-arm64 -D__ANDROID_API__=24
后面的是目标平台,可选值反正就是
- android-arm
- android-arm64
- android-armeabi
- android-mips
- android-mips64
- android-x86
- android-x86_64
- android64
- android64-aarch64
- android64-mips64
- android64-x86_64
自己看着办。
最后直接 make
编译就行。
make -j4 -s
根据自己的 CPU 内存等爱咋咋办,最好加上 -s
让 make
别输出实际执行的内容,对于Windows 的弱鸡控制台来说,还能快不少。
最后编译出来的库就在当前目录
- libcrypto.a
- libcrypto.so
- libssl.a
- libssl.so
没了。