Mar*_*hio 5 android openssl android-ndk
我需要为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
Run Code Online (Sandbox Code Playgroud)
然后我修改了jni目录中的Android.mk文件,试图包含OpenSSL文件:
subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \
openssl \
))
include $(subdirs)
Run Code Online (Sandbox Code Playgroud)
现在,当我执行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
Run Code Online (Sandbox Code Playgroud)
我找到了http://osdir.com/ml/android-ndk/2010-07/msg00424.html,它告诉我在crypto/Android.mk中"添加jni和jni/include到上面的LOCAL_C_INCLUDES",但我可以找出我应该用来实现这个的语法.
我也无法弄清楚我有正确的目录结构.
我真诚地感谢任何可以提供的帮助.
谢谢!
Mar*_*hio 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" - >"libsslx"和"libcrypto" - >"libcryptox")(即在/ crypto,/ ssl和/中)应用).
然后在您的Android应用程序中,调用SystemLoadLibrary("cryptox")和System.LoadLibrary("sslx")
| 归档时间: |
|
| 查看次数: |
5608 次 |
| 最近记录: |