1 建议采用boringssl 替代 openssl
目前Android6.0以后已经采用boringssl而非openssl,故如果网络框架中需要采用ssl加密,建议采用boringssl。而且Android平台需要openssl 1.0.1x,采用工具链编译坑也比较多,boringssl有google官方支持。
2 下载boringssl 编写 配置环境NDK环境变量
boringssl 准备好你的NDK,最好将NDK目录添加到环境变量中,比如我的NDK路径是 $HOME/Android/sdk/ndk-bundle 可以在 shell脚本里写上
export ANDROID_NDK=/Users/fanzhengchen/Android/sdk/ndk-bundle
然后source 命令执行下这个脚本
3 cmake 构建
我们可以参考官方的BUILD.md 不过我们还需要添加一些其他的额外变量 先在boringssl 根目录下新建一个build文件夹,进入build文件夹下 编写一个shell脚本
#!/bin/sh
$ANDROID_SDK/cmake/3.6.3155560/bin/cmake \
-DANDROID_ABI=armeabi-v7a \
-DCMAKE_MAKE_PROGRAM=$ANDROID_SDK/cmake/3.6.3155560/bin/ninja \
-DANDROID_NATIVE_API_LEVEL=16 \
-DANDROID_NDK=$ANDROID_NDK \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-GNinja \
..
cmake --build .
其中CMAKE_TOOLCHAIN_FILE完全换成boringssl自带的android.toolchain.cmake 我还添加了一个CMAKE_BUILD_TYPE 设置为Release
CMAKE_MAKE_PROGRAM 可以设置为SDK里自带的ninja。
执行这个shell脚本,你会在ssl和crypto下得到两个静态库libssl.a和libcrypto.a,头文件就是boringssl根目录下的include,导入到你的Android工程就不介绍了,文章很多的。