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

问题描述:

我需要为Android应用程序构建最新的OpenSSL(1.0.0g)。我试图按照https://github.com/fries/android-external-openssl给出的例子,但我无法建立它。无法在Windows上为Android NDK构建外部OpenSSL库/ Cygwin

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

我创建了一个名为hello-openssl的新样本NDK应用程序。在它的jni目录中,我创建了一个openssl目录。在那里,我解压https://github.com/fries/android-external-openssl/zipball/master,这给了我在c此树结构:\机器人\ Android的NDK \样本\ HELLO-的OpenSSL:

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

然后我修改了Android.mk文件中的JNI企图包括OpenSSL的文件目录:

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

include $(subdirs) 

现在,当我执行NDK建造,它编译几个.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,/)中进行全文搜索并替换(“libssl” - >“libsslx”和“libcrypto” - >“libcryptox” ssl和/ apps)。

然后在你的Android应用程序,调用SystemLoadLibrary( “cryptox”)和的System.loadLibrary( “sslx”)

+0

您好,我试图做像你一样,我用的OpenSSL的Android同样的事情,构建源代码并获得了我的.so文件,但是在我的项目中使用它时遇到了问题,我使用这些库编写了.c文件,将它放在我的jni文件夹中,并编写了一个Android.mk文件,告诉我还使用了2个共享图书馆,一切都编译好,但在运行时崩溃与UnsatisfiedLinkError,这将是很好,如果我们可以谈。 – onizukaek 2013-08-18 14:36:18