在Win32上构建适用于Android的OpenSSL(ARMv7)

Ily*_*lya 6 android openssl

如何在Win32上为Android ARM v7(使用Android NDK)构建OpenSSL?

Ily*_*lya 1

在 OpenSSL 的wiki和 setenv-android.sh 相应更新之前,我将在此处发布配方。该过程所需的修复是:

  1. 更新 setenv-android.sh 以支持 Windows。
  2. 更新 PATH 以使用 Android NDK 的 (mingw) GNU make(而不是 Cygwin 的)。
  3. make使用 Windows 风格的路径调用 Cygwin 的 perl 。

这个配方将是 Cygwin 和 mingw 的奇怪混合体(因为 win32 的 Android NDK gcc 工具链是 mingw)。我假设 Android NDK 的 Windows x86_64 版本解压到c:\android-ndk-r9d中,并且您希望使用 gcc 4.8 工具链。

  1. 安装 Android NDK(废话!)。
  2. 安装 Cygwin——确保包含perl
  3. 以管理员身份启动 Cygwin shell,以确保本机符号链接能够正常工作。

在控制台中,运行以下脚本来设置变量:

export \
  CYGWIN=winsymlinks:native \
  ANDROID_API=android-14 \
  ANDROID_DEV=c:/android-ndk-r9d/platforms/android-14/arch-arm/usr \
  PATH=/cygdrive/c/android-ndk-r9d/prebuilt/windows-x86_64/bin:/cygdrive/c/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin:$PATH \
  MACHINE=armv7 \
  SYSTEM=android \
  ARCH=arm \
  CROSS_COMPILE=arm-linux-androideabi-
Run Code Online (Sandbox Code Playgroud)

现在,解压 openssl:

  1. tar xzfv openssl-1.0.1i.tar.gz(或者无论你的 tarball 是什么)
  2. cd openssl-1.0.1i(或者无论你的版本是什么)

确保 include/openssl 中有实际的本机 Win32 (!) 符号链接:

cmd /c "dir include\openssl"
Run Code Online (Sandbox Code Playgroud)

您应该看到类似以下内容:

13-Aug-14  05:59 PM    <SYMLINK>      aes.h [..\..\crypto\aes\aes.h]
13-Aug-14  05:59 PM    <SYMLINK>      asn1.h [..\..\crypto\asn1\asn1.h]
Run Code Online (Sandbox Code Playgroud)

(ETC。)

现在是时候配置了:

./config shared -no-ssl2 -no-ssl3 -no-comp -no-hw -no-engine --openssldir=/foo/bar
Run Code Online (Sandbox Code Playgroud)

忽略构建失败(由于找不到 perl)。我们会立即纠正这个问题。做这个:

make PERL=$(cygpath -w $(which perl))
Run Code Online (Sandbox Code Playgroud)

现在等待几分钟直到它构建完毕,很快,你就拥有了 libcrypto.so 等。