2011-02-10 25 views
22

Chciałbym korzystać z biblioteki cURL w mojej aplikacji Android w natywnym kodzie (przy użyciu najnowszej wersji NDK r5b). Po zbadaniu online, wydaje się, że jedynym sposobem użycia cURL w Androidzie jest zbudowanie całego drzewa źródłowego androida z zawinięciem w nim, i jakoś to generuje niezbędny plik konfiguracyjny dla cURL do pracy na Androidzie. Nie mam żadnego doświadczenia w budowaniu źródeł Androida od zera i zastanawiałem się, czy istnieje sposób na wykorzystanie biblioteki cURL w Androidzie bez konieczności odbudowywania Androida ze źródła. Idealnie byłoby móc użyć cURL jako biblioteki statycznej lub współdzielonej. Próbowałem następujących etapów wymienionych tutaj ...Używanie cURL w Androidzie

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

ale skończyć się błędy w curlrules.h plików jak CURL_SIZEOF_LONG definition is missing!

Zakładam te błędy są spowodowane nie mając dany plik konfiguracyjny wspomniałem ale kroki w powyższym linku nie wspomniały o żadnym z tych i zgłoszonych sukcesach. Jakieś pomysły?

+5

Czy to musi być cURL? Android jest wyposażony w klienta HTTP, wiesz. Poza tym wysyłka niestandardowej wersji Androida wraz z Twoją aplikacją prawdopodobnie nie będzie latać z większością klientów. –

+1

To musi być coś, czego mogę użyć w natywnym kodzie, więc androidy androidów nie pomogą. Co trzeba zrobić, nie byłoby dobrze przeskakiwanie pomiędzy wersją java i C. Nie chciałem przekazać, że będzie to wymagało niestandardowej kompilacji ... nie wymagałoby tego. Właśnie mówiłem, że tutoriale online na temat używania cURL w androidzie obejmują tworzenie pliku konfiguracyjnego curl poprzez budowanie źródeł androida z biblioteką curl (lub czymś w tym stylu). – Nitrex88

+0

Witam, czy mógłbyś rozwiązać ten problem? Też mam ten sam problem wysłany [tutaj] (http://stackoverflow.com/questions/13493232/android-ndk-refer-to-external-libraries-in-jni) .... – MobiDev

Odpowiedz

18

Mam podobne zadanie! Pracuję nad app, który wymaga teraz curl i właśnie dzisiaj w moich poszukiwaniach natknąłem poście tutaj, i to, co uważam za odpowiedź:

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

przeciwieństwie linku odwołanie, nie jest kilka następnych komentarzy od innych osób, które twierdzą, że odnoszą sukcesy także zgodnie z instrukcjami. Jeśli uda ci się go skompilować przede mną, i nie miałbyś nic przeciwko wysłaniu mi biblioteki, opublikuj tu kontynuację! (Jestem całkiem nowy, aby przepełnić stos, więc nie wiem, czy możesz pm.) Mam nadzieję, że to działa dla nas obu!

+0

Też znalazłem to : http://code.google.com/p/android-nixutils/downloads/list, ale nie jestem pewien, czy to jest to, o czym myślę. Nie testowałem w ogóle. –

+0

Kiedy zdałem sobie sprawę, że nie tylko potrzebuję cURL, ale także OpenSSL dla mojego kodu (i pomyślałem, że jeśli nie mogę go zmusić do kompilacji, nie mogłem zmusić ich do wspólnej kompilacji), podjąłem decyzję i postanowiłem użyć Android klasy HTTP do wykonywania połączeń POST i GET. Następnie po prostu wywołuję te metody java z natywnego kodu przy użyciu JNI. Te metody zwracają jobject do natywnego kodu, a następnie mogę pobrać pola zwróconego obiektu (które inicjuję i zapełniam dane wyników sieci w java) również przy użyciu JNI. Powodzenia, jeśli podejmiesz podobne podejście lub kontynuujesz poszukiwania! – Nitrex88

+0

Pracuję nad budowaniem curl z obsługą openssl, wygląda na to, że skrypt konfiguracyjny curl jest całkowicie borkowany pod tym względem. Moje obecne podejście polega na hakowaniu pliku Makefile na własną rękę. Daj mi znać, jeśli nadal jesteś zainteresowany. – anselm

13

Wydaje się, że istnieją projekty na github, że zautomatyzowane zarówno OpenSSL i libCurl do NDK produkcji:

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

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

zamiar użyć tych w moim app, więc mogę mieć pojedynczy biblioteka do obsługi komunikacji z backendami dla systemów iOS i Android ...

+0

Jest inny projekt na GitHub, który obsługuje portowanie lib curl do dwóch systemów iOS i Android, który obejmuje również obsługę openSSL. Link: https://github.com/gcesarmza/curl-android-ios –

1

"Brak definicji CURL_SIZEOF_LONG!"

jest na to sposób.

zmienić curlbuild.h na numer linii 162 dodać tak, jeśli jesteś platformą 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

Podążam za tym link. I to działa dla mnie. Nie trzeba pobrać cały android repozytorium, aby skompilować libCurl

1

miałem podobne pytanie, które nie dostać odpowiadając w ten sposób została automatycznie usuwane :(

Zresztą ja z powodzeniem stosowany pozwijane na android i przesłaniu skompilowaną wersję, aby pomóc ludziom wciąż szukają.

Download: libcurl_for_arm

i a lso wymagało też typecheck-gcc.Plik h, które mam zmienione i dodane tutaj zbyt

Download: typecheck-gcc.h

+1

Ten link już nie działa, czy mógłbyś ponownie przesłać plik biblioteki libcurl? – DocKimbel

11

Po Sprawdzać possibles post o tym, ale w końcu dostałem dobrą kompilację przy użyciu maszyny Linux x64 i Curl wersji 7.37.0 w ścieżce $ {android -ndk-r10}.

Może to kroki mogą pomóc:

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

Dostaniesz wersji kompilacji na $ {Android NDK-R10} /external/curl/build/curl-7.37.0.

Jeśli używasz 64-bitowego maszynę do kompilacji, może 2 definiuje są złe, a otrzymasz ten błąd:

error: size of array '__curl_rule_01__' is negative 

rozwiązać redefinicji zmienne w pliku $ {CurlbuildAndroid}/include/curl/curlbuild .h (To niebezpieczne, ale zadziałało!):

CURL_SIZEOF_LONG 4 
CURL_TYPEOF_CURL_OFF_T 4 
Powiązane problemy