在Android中使用cURL

我想在本地代码中使用我的android应用程序中的cURL库(使用NDK r5b,最新)。 在线研究之后,似乎在android中使用cURL的唯一方法是用curl来构build整个android源代码树,并在某种程度上为cURL生成一个必要的configuration文件以在Android上运行。 我没有从头开始构buildandroid源码的经验,并想知道是否有一种方法可以在Android中使用cURL库,而无需从源码重buildandroid。 理想情况下,能够将cURL用作静态或共享库是完美的。 我试着按照这里提到的步骤…

http://curl.haxx.se/mail/lib-2009-12/0071.html

但最终得到错误的文件curlrules.h像CURL_SIZEOF_LONG definition is missing!

我认为这些错误是由于没有我提到的configuration文件,但上述链接中的步骤没有提到任何的和报告的成功。 有任何想法吗?

我在类似的任务! 我现在正在开发一个应用程序,它需要cURL,而且在今天晚上我的search中,我在这里遇到了你的post,我相信这是一个答案:

http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html

与您引用的链接不同的是,其他人也会根据说明提出几个后续评论。 如果你能在我之前把它编译出来,而且不介意把图书馆寄给我,那就在这里发表一个跟进意见! (我很新的堆栈溢出,所以我不知道你是否可以下午。)希望这对我们俩都有效!

看起来github上的项目为NDK构build自动化了openssl和libcurl:

https://github.com/jahrome/curl-android

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

要在我自己的应用程序中使用这些,所以我可以让单个库处理iOS和Android的后端通信。

在检查了所有可能的后,我终于得到了一个很好的编译使用Linux x64机器和Curl版本7.37.0path$ {android-ndk-r10}。

也许这个步骤可以帮助你:

 ${android-ndk-r10}/build/tools/make-standalone-toolchain.sh --platform=android-15 --arch=armv7-a --toolchain=arm-linux-androideabi-4.8 --install-dir=./tmp/android-15 

 export CC="${android-ndk-r10}/external/curl/tmp/android-15/bin/arm-linux-androideabi-gcc" 

 ./configure --host=arm-linux --enable-cross-compile --enable-threaded-resolver --disable-shared --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-manual --enable-proxy --enable-ipv6 --enable-cookies --enable-symbol-hiding --disable-versioned-symbols --disable-soname-bump --disable-sspi --disable-ntlm-wb --prefix=${android-ndk-r10}/external/curl/build/curl-7.37.0 

 make -j4 

5?

 make install 

您将在$ {android-ndk-r10} /external/curl/build/curl-7.37.0上获得构build版本。

如果你正在使用一个64位的机器来编译,也许2个定义是不好的,你会得到这个错误:

 error: size of array '__curl_rule_01__' is negative 

我解决了重新定义文件$ {CurlbuildAndroid} /include/curl/curlbuild.h中的variables(它危险的做到这一点,但它的工作!):

 CURL_SIZEOF_LONG 4 CURL_TYPEOF_CURL_OFF_T 4 

我跟随这个链接 。 它适用于我。 我不必下载整个Android库来编译libcurl

“CURL_SIZEOF_LONG定义丢失!”

有一个办法。

如果你是arm32平台,改行号162的curlbuild.h就这样加上。

 //----------------------------------------------add # define CURL_SIZEOF_LONG 4 # define CURL_TYPEOF_CURL_OFF_T long long # define CURL_FORMAT_CURL_OFF_T "lld" # define CURL_FORMAT_CURL_OFF_TU "llu" # define CURL_FORMAT_OFF_T "%lld" # define CURL_SIZEOF_CURL_OFF_T 8 # define CURL_SUFFIX_CURL_OFF_T LL # define CURL_SUFFIX_CURL_OFF_TU ULL # define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int # define CURL_SIZEOF_CURL_SOCKLEN_T 4 //#define __SYMBIAN32__ 

我有一个类似的问题没有得到答案,因此被自动删除:(

无论如何,我已经成功地在Android上使用curl,并上传了编译版本,以帮助仍在search的人。

下载:libcurl_for_arm

我也需要一个typecheck-gcc.h文件,我已经修改并上传了

下载:typecheck-gcc.h