android - 无法在 Windows/Cygwin 上为 Android NDK 构建外部 OpenSSL 库

标签 android android-ndk openssl

我需要为 Android 应用程序构建最新的 OpenSSL (1.0.0g)。我正在尝试按照 https://github.com/fries/android-external-openssl 给出的示例进行操作,但我无法构建它。

我正在运行 Windows 7 Professional(64 位)和完整的最新 Cygwin。我已经安装了 Android SDK 和 NDK,我可以成功构建和运行 NDK 的 hello-jni 示例应用程序。

我创建了一个名为 hello-openssl 的新示例 NDK 应用程序。在它的 jni 目录中,我创建了一个 openssl 目录。在那里,我解压缩了 https://github.com/fries/android-external-openssl/zipball/master ,它在 c:\android\android-ndk\samples\hello-openssl 下给了我这个树结构:

jni
+- openssl
   +- apps
   +- crypto
   +- include
      +- openssl
   +- ssl

然后我修改了 jni 目录中的 Android.mk 文件以尝试包含 OpenSSL 文件:

subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \
    openssl \
))

include $(subdirs)

现在当我执行 ndk-build 时,它编译了几个 .c 文件,但很快就失败了:

Compile thumb  : crypto <= cryptlib.c
In file included from jni/openssl/crypto/cryptlib.c:117:
jni/openssl/crypto/cryptlib.h:65:18: error: e_os.h: No such file or directory
jni/openssl/crypto/cryptlib.h:72:28: error: openssl/crypto.h: No such file or directory

我找到了 http://osdir.com/ml/android-ndk/2010-07/msg00424.html ,它告诉我“添加 jni 和 jni/include 到 crypto/Android.mk 中的上述 LOCAL_C_INCLUDES",但我无法弄清楚我应该使用什么语法来实现这一点。

我也不知道我有正确的目录结构。

我真诚地感谢可以提供的任何帮助。

谢谢!

最佳答案

我通过放弃 https://github.com/fries/android-external-openssl 解决了这个问题而是使用 https://github.com/guardianproject/openssl-android .

它基于更新的 OpenSSL (1.0.0a),并且在没有任何修改的情况下构建在 NDK 中。

请注意,为了在 Android 应用程序中使用这些库,您必须重命名它们。如果你简单地在你的应用程序中包含生成的 libssl.so 和 libcrypto.so,然后调用 System.LoadLibrary("crypto") 和 System.LoadLibrary("ssl"),你将获得 Android 系统中包含的 OpenSSL 库,而不是您的自定义库。

为此,只需在每个 Android.mk(即/crypto、/ssl , 和/apps).

然后在您的 Android 应用中,调用 SystemLoadLibrary ("cryptox") 和 System.LoadLibrary ("sslx")

关于android - 无法在 Windows/Cygwin 上为 Android NDK 构建外部 OpenSSL 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065409/

相关文章:

android - 无法解析 com.google.android.gms :play-services-base:6. 5.+

java - xml中的ListView,将Adapter设置为

android - 如何处理构建过程中自动生成的源代码文件

android - 具有不同 native 代码的多个 APK

php - 调用未定义的函数 Illuminate\Encryption\openssl_cipher_iv_length() - laraval5

Android:听所有 toast

Android:打开 Activity 而不保存到堆栈中

android-ndk - Android 命名空间的 ndk 构建错误

ssl - 如何在 SSL 连接的服务器端接收数据?

PL/SQL 中的 Oracle DBMS_LDAP.open_ssl 显示错误 : ORA-31202: SSL handshake failed