我需要为Android应用程序构建最新的OpenSSL(1.0.0g)。我试图按照https://github.com/fries/android-external-openssl给出的示例,但我无法建立它。
我正在使用完整且最新的Cygwin运行Windows 7 Professional(64位)。我已经安装了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,它告诉我&#34;添加 jni和jni / include到上面的LOCAL_C_INCLUDES&#34;在crypto / Android.mk中,但我无法弄清楚我应该用来实现这个目的的语法。
我也无法弄清楚我是否有正确的目录结构。
我真诚地感谢所提供的任何帮助。
谢谢!
答案 0 :(得分:12)
我通过放弃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中进行全字搜索并替换(“libssl” - &gt;“libsslx”和“libcrypto” - &gt;“libcryptox”)(即在/ crypto中, / ssl和/ apps)。
然后在您的Android应用中,调用SystemLoadLibrary(“cryptox”)和System.LoadLibrary(“sslx”)