[安卓]成功在android平台用ndk上编译libcurl+openssl支持https

来源:互联网 发布:vmware12上的mac补丁 编辑:程序博客网 时间:2024/06/07 00:35

链接:http://piggyq.com/pen/compile-libcurl-and-openssl-on-android-using-ndk.html

为了使app应用支持更多的平台,对https的支持,使用c来实现,所以使用libcurl作为http client的实现是非常方便的。

具体的编译步骤见前两篇文章:

Windows平台用NDK成功移植编译curl到Android

Android上使用curl(libcurl),无法连接Internet,couldn’t resolve host name or couldn’t connect to server

现在需要使用SSL用来加密传输,支持https协议,需要使用到openssl库添加进来一起编译

1.编译openssl

使用官方的不知道有没问题,没有具体关注下,我使用的是guardianproject的openssl,它已经提供好了android的ndk makefile。

git clone https://github.com/guardianproject/openssl-android.git

解压到任意目录(最好没有空格,容易出现问题),如$HOME/Developer/openssl-android/,然后直接cd到该目录,$NDK/ndk-build就行。

2.编译libcurl with ssl

如“在android中增加curl”文章所言,打开SSL相关宏定义:

configure找不到openssl,所以所生成的配置文件是不使用openssl的。要想使用ssl,需要手动修改 lib/curl_config.h,打开宏定义HAVE_LIBSSL、 HAVE_OPENSSL_CRYPTO_H、HAVE_OPENSSL_ERR_H、HAVE_OPENSSL_PEM_H、 HAVE_OPENSSL_PKCS12_H、HAVE_OPENSSL_RSA_H、HAVE_OPENSSL_SSL_H、 HAVE_OPENSSL_X509_H、USE_OPENSSL、USE_SSLEAY(但是注意android没有编译openssl中的 engine,因此不要打开宏定义HAVE_OPENSSL_ENGINE_H),同时注释掉宏定义HAVE_MALLOC_H和HAVE_IOCTL, 这两个宏定义在Android_config.h中有定义,不注释的话在编译过程中会有很多警告(但是能正确编译通过)

修改curl/Android.mk文件,在LOCAL_C_INCLUDES变量的值中增加openssl-android/include和openssl-android/crypto,在 LOCAL_SYSTEM_SHARED_LIBRARIES变量的值中增加 libssl  libcrypto  libz(NDK已有)。注意在之前先应用libssl.so和libcrypto.so:

#using libssl.so
include $(CLEAR_VARS) 
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := libssl.so 
include $(PREBUILT_SHARED_LIBRARY)

#using libcrypto.so
include $(CLEAR_VARS) 
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES := libcrypto.so 
include $(PREBUILT_SHARED_LIBRARY)

Android test工程文件:http://115.com/file/c27nt10j


0 0
原创粉丝点击