1、下载工程
https://www.openssl.org/source/
下载最新版的openssl-1.1.1-pre5
2、打开NOTES.ANDROID
加压后进入根目录,可以看到
Configuration
-------------
Android is naturally cross-compiled target and you can't use ./config.
You have to use ./Configure and name your target explicitly; there are
android-arm, android-arm64, android-mips, android-mip64, android-x86
and android-x86_64. Do not pass --cross-compile-prefix (as you might
be tempted), as it will be "calculated" automatically based on chosen
platform. Though you still need to know the prefix to extend your PATH,
in order to invoke $(CROSS_COMPILE)gcc and company. (Configure will fail
and give you a hint if you get it wrong.) Apart from PATH adjustment
you need to set ANDROID_NDK environment to point at NDK directory
as /some/where/android-ndk-<ver>. NDK customarily supports multiple
Android API levels, e.g. android-14, android-21, etc. By default latest
one available is chosen. If you need to target older platform, pass
additional -D__ANDROID_API__=N to Configure. N is numeric value of the
target platform version. For example, to compile for ICS on ARM with
NDK 10d:
ANDROID_NDK=/some/where/android-ndk-10d
PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.8/prebuild/linux-x86_64/bin:$PATH
./Configure android-arm -D__ANDROID_API__=14
这样一段话,根据这句话,写编译脚本build-android.sh如下
cd /home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5
rm -rf ./android
mkdir ./android
export ANDROID_NDK=/home/yong/Downloads/android-ndk-r16b
export PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure android-arm -D__ANDROID_API__=23 --prefix=/home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5/android
make && make install
3、执行编译
sh build-android.sh
再到根目录/android下,即可看到编译结果
* 编译脚本改进
#armeabi armeabi-v7a armeabi-v7a-hard arm64-v8a mips mips64 x86 x86_64
export ARCH=arm
cd /home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5
make clean
rm -rf ./android-$ARCH
mkdir ./android-$ARCH
export ANDROID_NDK=/home/yong/Downloads/android-ndk-r16b
export PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure android-$ARCH -D__ANDROID_API__=23 --prefix=/home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5/android-$ARCH
make && make install
*编译脚本改进
其中ARCH_NAME的备选值可以从NOTES.ANDROID文件中找到。
func_cmp(){
cd /home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5
make clean
rm -rf ./android-$ARCH
mkdir ./android-$ARCH
export ANDROID_NDK=/home/yong/Downloads/android-ndk-r16b
export PATH=$ANDROID_NDK/toolchains/$TOOL_CHAIN/prebuilt/linux-x86_64/bin:$PATH
./Configure $ARCH_NAME -D__ANDROID_API__=23 --prefix=/home/yong/Desktop/test-android-openssl-001/openssl-1.1.1-pre5/android-$ARCH
make && make install
}
for ARCH in armeabi-v7a armeabi arm64-v8a x86 x86_64 mips mips64
do
echo $ARCH
if [ "$ARCH" = "armeabi-v7a" ]; then
ARCH_NAME=android-arm
TOOL_CHAIN=arm-linux-androideabi-4.9
fi
if [ "$ARCH" = "armeabi" ]; then
ARCH_NAME=android-arm
TOOL_CHAIN=arm-linux-androideabi-4.9
fi
if [ "$ARCH" = "arm64-v8a" ]; then
ARCH_NAME=android-arm64
TOOL_CHAIN=aarch64-linux-android-4.9
fi
if [ "$ARCH" = "mips" ]; then
ARCH_NAME=android-mips
TOOL_CHAIN=mipsel-linux-android-4.9
fi
if [ "$ARCH" = "mips64" ]; then
ARCH_NAME=android-mip64
TOOL_CHAIN=mips64el-linux-android-4.9
fi
if [ "$ARCH" = "x86" ]; then
ARCH_NAME=android-x86
TOOL_CHAIN=x86-4.9
fi
if [ "$ARCH" = "x86_64" ]; then
ARCH_NAME=android-x86_64
TOOL_CHAIN=x86_64-4.9
fi
echo $TOOL_CHAIN
func_cmp
done