Curl is a well-known open source file Transfer Protocol implementation software, including HTTP, HTTPS, FTP and other commonly used not common protocol implementation. The latest version of Curl's official source code already includes the Android compilation file (ANDROID.MK), but there is still work to do to compile it.
The Curl version I use is the 7.20.0,android source version is Eclair 2.1.
First of all, curl uncompressed to the external directory, the directory name changed to curl (can not change, but the habit of Android is not with version number, as in the Romans).
(1) First to create a header file curl_config.h. the creation method is described in a comment in the header of the curl/android.mk file. Run Configure according to this description. I use the following command line (I was compiled into x86 version, but our goal is to generate curl_config.h files, so x86 or arm is actually the same):
Copy Code code as follows:
Android_root= ' Realpath. /.. ' && path= ' $ANDROID _root/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin: $PATH./configure --host=x86-linux CC=I686-UNKNOWN-LINUX-GNU-GCC cppflags= "-I $ANDROID _root/external/curl/include/ -i $ANDROID _ Root/external/curl -i $ANDROID _root/out/target/product/eeepc/obj/static_libraries/libcurl_intermediates -i $ANDROID _root/system/core/include -i $ANDROID _root/hardware/libhardware/include -i $ANDROID _ Root/hardware/libhardware_legacy/include -i $ANDROID _root/hardware/ril/include -i $ANDROID _root/dalvik /libnativehelper/include -i $ANDROID _root/frameworks/base/include -i $ANDROID _root/frameworks/base/ Opengl/include -i $ANDROID _root/external/skia/include -i $ANDROID _root/out/target/product/eeepc/obj/ Include -i $ANDROID _root/bionic/libc/arch-x86/include -i $ANDROID _root/bionic/libc/include -i $ Android_root/bionic/libstdc++/include -i $ANDROID _root/bionic/libc/kernel/commoN -i $ANDROID _root/bionic/libc/kernel/arch-x86 -i $ANDROID _root/bionic/libm/include -i $ANDROID _ Root/bionic/libm/include/i387 -i $ANDROID _root/bionic/libthread_db/include-i $ANDROID _root/external/openssl /include "cflags="-fno-exceptions-wno-multichar-march=i686-m32-fpic-include $ANDROID _root/system/core/include/ Arch/target_linux-x86/androidconfig.h-m32-dandroid-fmessage-length=0-fno-strict-aliasing-wno-unused-winit-self -wpointer-arith-werror=return-type-werror=non-virtual-dtor-werror=address-werror=sequence-point-wpointer-arith -wwrite-strings-wunused-winline-wnested-externs-wmissing-declarations-wmissing-prototypes-wno-long-long- Wfloat-equal-wno-multichar-wsign-compare-wno-format-nonliteral-wendif-labels-wstrict-prototypes- Wdeclaration-after-statement-wno-system-headers "lib=" $ANDROID _root/prebuilt/linux-x86/toolchain/ I686-UNKNOWN-LINUX-GNU-4.2.1/LIB/GCC/I686-UNKNOWN-LINUX-GNU/4.2.1/LIBGCC.A $ANDROID _root/prebuilt/linux-x86/ Toolchain/I686-UNKNOWN-LINUX-GNU-4.2.1/LIB/GCC/I686-UNKNOWN-LINUX-GNU/4.2.1/CRTBEGIN.O $ANDROID _root/prebuilt/linux-x86/ TOOLCHAIN/I686-UNKNOWN-LINUX-GNU-4.2.1/LIB/GCC/I686-UNKNOWN-LINUX-GNU/4.2.1/CRTEND.O "
(2) Configure cannot find the OpenSSL, so the generated configuration file is not using OpenSSL. To use SSL, you need to manually modify lib/curl_config.h and src/curl_config.h to open the macro definition 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 (but note that Android does not compile the engine in OPENSSL, so do not open the macro definition Have_openssl_engine_h), and comment out the macro definition Have_malloc_h and Have_ioctl, These two macro definitions are defined in the android_config.h and there will be many warnings during compilation (but they can be compiled correctly).
(3) Modify the Curl/android.mk file, add External/openssl/include in the value of the local_c_includes variable, and increase the value of the local_system_shared_libraries variable Libssl libz Libcrypto.
Okay, now you can compile:
Make Curl One_shot_makefile=external/curl/android.mk target_product=<...>
However, the above android.mk file will libcurl compiled into a static library, to be compiled into a dynamic library also need to modify the Android.mk file.