2011-02-10 3 views
22

Je voudrais utiliser la bibliothèque cURL dans mon application android en code natif (en utilisant NDK r5b, le dernier). Après avoir fait des recherches en ligne, il semble que la seule façon d'utiliser cURL dans android est de construire l'arborescence source android avec curl, et cela génère un fichier de configuration nécessaire pour que cURL fonctionne sur Android. Je n'ai aucune expérience de la construction des sources Android à partir de zéro et je me demandais s'il y avait un moyen d'utiliser la bibliothèque cURL dans Android sans avoir à reconstruire Android à partir de la source. Idéalement, pouvoir utiliser cURL comme une bibliothèque statique ou partagée serait parfait. J'ai essayé en suivant les étapes mentionnées ici ...Utiliser cURL dans Android

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

mais finissent par obtenir des erreurs dans le fichier curlrules.h comme CURL_SIZEOF_LONG definition is missing!

Je suppose que ces erreurs sont dues à ne pas avoir ce fichier de configuration je l'ai mentionné mais les étapes dans le lien ci-dessus n'ont mentionné aucune de cela et ont rapporté le succès. Des idées?

+5

Faut-il utiliser cURL? Android est livré avec un client HTTP, vous savez. En outre, l'envoi d'une version personnalisée d'Android avec votre application ne sera probablement pas disponible pour la plupart des clients. –

+1

Il doit être quelque chose que je peux utiliser dans le code natif, donc le client HTTP androids ne va pas aider. Pour ce qui doit être fait, il ne serait pas bon de faire des allers-retours entre Java et C. Et je ne voulais pas dire que cela nécessiterait une construction personnalisée ... cela ne serait pas nécessaire. Je disais juste que les tutoriels en ligne sur l'utilisation de cURL dans android impliquent la création d'un fichier de configuration curl en construisant les sources android avec la bibliothèque curl (ou quelque chose comme ça). – Nitrex88

+0

Salut pourriez-vous résoudre ce problème? J'ai également le même problème publié [ici] (http://stackoverflow.com/questions/13493232/android-ndk-refer-to-external-libraries-in-jni) .... – MobiDev

Répondre

18

Je suis dans une quête similaire! Je travaille sur une application en ce moment qui nécessite cURL et juste ce soir dans ma recherche je suis tombé sur votre poste ici, et ce que je crois être la réponse:

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

Contrairement au lien que vous avez mentionné, il sont plusieurs commentaires de suivi d'autres personnes qui prétendent avoir du succès également en suivant les instructions. Si vous parvenez à le compiler avant moi, et que cela ne vous dérangerait pas de m'envoyer la bibliothèque, postez un suivi ici! (Je suis assez nouveau pour empiler overflow donc je ne sais pas si vous pouvez pm.) J'espère que cela fonctionne pour nous deux!

+0

J'ai également trouvé ceci : http://code.google.com/p/android-nixutils/downloads/list mais je ne sais pas si c'est ce que je pense. N'a pas testé du tout. –

+0

Une fois que j'ai réalisé que non seulement j'aurais besoin de cURL mais aussi OpenSSL pour mon code (et je me suis dit que si je ne pouvais pas compiler, je ne pourrais pas les compiler ensemble), j'ai abandonné et j'ai décidé d'utiliser Les classes HTTP android pour faire des appels POST et GET. Je viens ensuite d'appeler ces méthodes java du code natif en utilisant JNI. Ces méthodes renvoient un jobject au code natif et puis je peux saisir les champs de l'objet retourné (que j'initialise et remplit les données de résultat de mise en réseau dans java) en utilisant JNI également. Bonne chance si vous adoptez une approche similaire ou poursuivez votre recherche! – Nitrex88

+0

Je travaille sur l'obtention de curl construit avec le support d'openssl, on dirait que le script de configuration de curl est totalement borken à cet égard. Mon approche actuelle consiste à pirater un makefile par moi-même. Faites-moi savoir si vous êtes toujours intéressé. – anselm

13

Il semble qu'il ya des projets sur github que automatisés à la fois OpenSSL et libcurl pour construire NDK:

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

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

va utiliser ceux de ma propre application, donc je peux avoir seul bibliothèque pour gérer la communication backend pour iOS et Android ...

+0

Il existe un autre projet sur GitHub qui prend en charge le portage de lib curl vers iOS et Android, qui inclut également le support openSSL. Lien: https://github.com/gcesarmza/curl-android-ios –

1

"La définition de CURL_SIZEOF_LONG est manquante!"

il y a un moyen pour cela.

changez le curlbuild.h au numéro de ligne 162 ajoutez comme ceci, si vous êtes la plate-forme arm32.

//----------------------------------------------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__ 
2

J'ai suivi cette link. Et cela fonctionne pour moi. Je ne devais pas télécharger l'ensemble du référentiel Android afin de compiler le libcurl

1

J'avais une question similaire qui n'a pas répondu et donc s'a été supprimée automatiquement :(

Quoi qu'il en soit, j'ai utilisé avec succès boucle sur Android et ont téléchargé une version compilée pour aider les personnes à la recherche encore.

Download: libcurl_for_arm

I a Iso requis un typecheck-gcc.h fichier que je l'ai modifié et téléchargé ici aussi

Download: typecheck-gcc.h

+1

Ce lien ne fonctionne plus, pourriez-vous s'il vous plaît re-télécharger le fichier de bibliothèque libcurl quelque part? – DocKimbel

11

Après avoir vérifié tous les possibles post sur ce, j'ai finalement obtenu une bonne compilation en utilisant une machine Linux x64 et la version 7.37.0 Curl à path $ {android -ndk-r10}.

Peut-être que ces étapes peuvent vous aider:

${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 

4º 01

make -j4 

make install 

Vous obtiendrez une version de construction à $ {android-NDK-r10} /external/curl/build/curl-7.37.0.

Si vous utilisez une machine 64bits pour compiler, peut-être 2 définit sont mauvais, et vous obtenez cette erreur:

error: size of array '__curl_rule_01__' is negative 

je résous redéfinir les variables dans le fichier $ {CurlbuildAndroid}/include/boucles/curlbuild .h (C'est dangereux de le faire, mais ça a marché!):

CURL_SIZEOF_LONG 4 
CURL_TYPEOF_CURL_OFF_T 4