【问题标题】:How to build OpenSSL to generate libcrypto.a with Android NDK and Windows如何使用 Android NDK 和 Windows 构建 OpenSSL 以生成 libcrypto.a
【发布时间】:2023-03-23 14:10:01
【问题描述】:

我创建了一个使用本机代码的 android 应用程序。

它需要来自 OpenSSL 的 libcrypto.a 库,我不记得我在哪里下载了它,但它可以工作。问题是lib的版本是1.0.0a,我想更新到最新的(现在是v1.0.1e)。我下载了https://github.com/android/platform_external_openssl并尝试编译它,但是编译的时候有很多错误。我不知道如何生成库。

或者也许 c 和 h 文件(来自 http://www.openssl.org/source/)可以包含在我的 c&h 文件中而不使用 lib?

谢谢!

【问题讨论】:

  • 我知道,这不是您问题的答案,但您可以使用 spongycastle 库 (rtyley.github.io/spongycastle) 作为替代方案。它不需要 NDK 并且可以工作。

标签: android build android-ndk openssl libcrypto


【解决方案1】:

如果您不想自己编译库,我刚刚完成并上传到 github。

OpenSSL 1.0.2 版(2015 年 1 月 22 日)

它包括 Arm 和 x86 的静态和共享库,还包括 Android.mk 和包含文件。

https://github.com/emileb/OpenSSL-for-Android-Prebuilt

【讨论】:

  • 我正在尝试自己构建 openssl 静态库,但遇到了一些问题。你能分享一下我可以参考的构建脚本吗?
  • 自 2016 年 7 月 11 日起,Google Play 会阻止使用旧版 OpenSSL 的应用程序。您必须使用 OpenSSL 1.02f/1.01r 或更高版本。
【解决方案2】:

使用最新的 OpenSSL 源,您应该能够使用来自 Android NDK 的独立工具链并配置 + 制作。基本步骤是:

  1. 导出 TOOL_PREFIX、CC 和 SYSROOT 以指向适当的工具链路径
  2. 配置
  3. 制作

几个例子:

ARMv5te

CC="/path/to/arm-linux-androideabi-gcc -mtune=xscale -march=armv5te -msoft-float --sysroot=/ndk_path/platforms/android-9/arch-arm"
./配置android no-asm

ARMv7

CC="/path/to/arm-linux-androideabi-gcc -march=armv7-a -mfloat-abi=softfp --sysroot=/ndk_path/platforms/android-9/arch-arm"
./配置android-armv7 no-asm

【讨论】:

  • 嗨,谢谢。但它可以用 Windows 完成吗?我将创建一个 VM 来尝试您的示例 :)
  • 我目前没有在 Windows 上进行 Android 开发。如果你能满足配置和朋友的要求(例如通过 Cygwin/UNIX 之类的 env)应该没问题。
  • 在 linux 下它可以工作,谢谢。但不是armv7,它会抛出这个错误:cryptlib.c:1:0: error: valor erróneo (armv7-a) para -march= switch
  • 您使用的是 ARMv7a 独立工具链(它确实与 ARMv5 不同)。如果我没记错(我现在无法检查)当您运行脚本来生成工具链时,您必须提供一个参数来执行此操作。
  • JoniJnm - “但是可以用 Windows 完成吗?” - OpenSSL的Android交叉编译脚本大概可以在MinGW下运行。
猜你喜欢
  • 2011-06-23
  • 2011-02-26
  • 2019-06-29
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2016-07-29
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多