2011-02-10 7 views
22

Vorrei utilizzare la libreria cURL nella mia applicazione Android in codice nativo (utilizzando NDK r5b, l'ultima). Dopo aver fatto ricerche online, sembra che l'unico modo per usare cURL in Android sia quello di costruire l'intero albero dei sorgenti di Android con l'arricciatura, e in qualche modo questo genera un file di configurazione necessario affinché cURL funzioni su Android. Non ho alcuna esperienza nella creazione di origini Android da zero e mi chiedevo se c'è un modo per usare la libreria CURL in Android senza dover ricostruire Android dal sorgente. Idealmente, essere in grado di usare semplicemente cURL come libreria statica o condivisa sarebbe perfetto. Ho provato seguendo la procedura di cui qui ...Utilizzo di cURL in Android

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

ma finire con errori nel file curlrules.h come CURL_SIZEOF_LONG definition is missing!

presumo questi errori sono causa di non avere file di configurazione che ho citato ma i passaggi nel link precedente non ne menzionano nessuno e riportano il successo. Qualche idea?

+5

Dev'essere cURL? Android ha un client HTTP, lo sai. Inoltre, la spedizione di una build personalizzata di Android insieme alla tua app probabilmente non andrà a buon fine con la maggior parte dei clienti. –

+1

Deve essere qualcosa che posso usare nel codice nativo, quindi il client HTTP di androidi non aiuterà. Per quello che deve essere fatto non sarebbe bello saltare avanti e indietro tra java e C. E non intendevo trasmettere ciò richiederebbe una costruzione personalizzata ... non lo richiederebbe. Stavo solo dicendo che i tutorial online sull'uso di cURL in Android prevedono la creazione di un file di configurazione curl costruendo le sorgenti Android con la libreria di arricciatura in esso (o qualcosa del genere). – Nitrex88

+0

Ciao, potresti risolvere questo problema? Ho anche lo stesso problema postato [qui] (http://stackoverflow.com/questions/13493232/android-ndk-refer-to-external-libraries-in-jni) .... – MobiDev

risposta

18

Sono in una ricerca simile! Sto lavorando su un'applicazione in questo momento che richiede cURL e solo stasera nella mia ricerca mi sono imbattuto tuo post qui, e quello che ritengo essere la risposta:

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

Diversamente il collegamento si fa riferimento, non ci sono diversi i commenti di follow-up di altre persone che affermano di avere successo anche seguendo le istruzioni. Se riesci a ottenerlo compilato prima di me, e non mi dispiacerebbe mandarmi la biblioteca, pubblica qui un seguito! (Sono abbastanza nuovo da impilare in overflow quindi non so se puoi pm.) Spero che questo funzioni per tutti e due!

+0

Ho anche trovato questo : http://code.google.com/p/android-nixutils/downloads/list ma non sono sicuro se è ciò che penso sia. Non ho provato affatto. –

+0

Una volta ho capito che non solo avrei bisogno di cURL ma anche di OpenSSL per il mio codice (e ho pensato che se non riuscivo a farmi compilare uno non riuscivo a compilare entrambi), ho rinunciato e ho deciso di usare il classi HTTP Android per effettuare chiamate POST e GET. Quindi chiamo questi metodi java dal codice nativo usando JNI. Questi metodi restituiscono un jobject al codice nativo e quindi posso prendere i campi dell'oggetto restituito (che inizializzo e popola i dati dei risultati di rete in java) usando anche JNI. Buona fortuna se segui un approccio simile o continua la tua ricerca! – Nitrex88

+0

Sto lavorando per ottenere il ricciolo costruito con il supporto di openssl, sembra che lo script di configurazione di curl sia totalmente in questo senso. Il mio attuale approccio è l'hacking di un makefile per conto mio. Fammi sapere se sei ancora interessato. – anselm

13

sembra che non ci sono progetti su GitHub che automatizzate sia OpenSSL e libcurl per NDK costruzione:

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

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

intenzione di utilizzare quelli nella mia app, così posso avere singolo libreria per gestire la comunicazione di backend sia per iOS che per Android ...

+0

C'è un altro progetto su GitHub che supporta il porting di lib curl su BOTH iOS e Android, che include anche il supporto openSSL. Link: https://github.com/gcesarmza/curl-android-ios –

1

"Manca la definizione di CURL_SIZEOF_LONG!"

c'è un modo per farlo.

cambiare il curlbuild.h al numero di riga 162 aggiungere in questo modo, se si è piattaforma 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

Ho seguito questo link. E funziona per me. Non ho avuto bisogno di scaricare l'intero repository Android al fine di compilare il libcurl

1

avevo una domanda simile, che non ha ottenuto risposto e quindi è stato rimosso automaticamente :(

comunque ho usato con successo ricciolo su Android e hanno caricato una versione compilata per aiutare la popolazione ancora alla ricerca.

Download: libcurl_for_arm

ho un Ho anche richiesto un typecheck-gcc.file di h che ho modificato e caricato anche qui

Download: typecheck-gcc.h

+1

Questo link non funziona più, potresti ricaricare il file della libreria libcurl da qualche parte? – DocKimbel

11

Dopo il check tutte le possibili post su questo, ho finalmente avuto una buona compilation utilizzando una macchina Linux x64 e Curl versione 7.37.0 nel percorso $ {Android -ndk-r10}.

Forse questa procedura può aiutare:

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

make install 

otterrete una versione build a $ {android-NDK-r10} /external/curl/build/curl-7.37.0.

Se si utilizza una macchina 64bit per compilare, forse 2 definisce sono cattivi, e si ottiene questo errore:

error: size of array '__curl_rule_01__' is negative 

risolvo ridefinire le variabili nel file $ {CurlbuildAndroid}/include/riccio/curlbuild .h (È pericoloso farlo, ma ha funzionato!):

CURL_SIZEOF_LONG 4 
CURL_TYPEOF_CURL_OFF_T 4