Próbuję przenieść libCurl do Androida z obsługą SSL, krokiem pierwszym byłoby przeniesienie curl bez obsługi ssl, więc chyba zacząłem to robić. ale mam problem.przenoszenie libcurl na Androida z obsługą ssl
Tak jak czytałem na stronie internetowej dev oraz w pliku Android.mk, trudniej jest najpierw skonfigurować markę. więc co zrobiłem to:
Pobierz Android kod źródłowy (! i skompilować go, ponieważ niektóre z pośrednich bibliotekami są potrzebne)
Pobierz cURL
rozpakować curl pod: {android_src}/external/curl
utworzyć skrypt konfiguracyjny dla zwijania, tworząc plik sh w folderze zewnętrznym/folderze z tą zawartością.
`
export A=/home/user/Development/AOSP/2.3.3
export CC=$A/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
export NDK=/home/user/Development/Tools/sdk/android/ndk
export NDKLIBS=$NDK/platforms/android-4/arch-arm/usr/include
export SYSROOT=$A/ndk/build/platforms/android-4/arch-arm
export CPPFLAGS="-I $A/system/core/include"
export LDFLAGS="-L$A/out/target/product/generic/obj/lib/ -L$A/out/target/product/generic/system/lib/-L$SYSROOT/usr/lib -Wl,--gc-sections -nostdlib -lc -lm -ldl -llog -lgcc -Wl,--no-undefined,-z,nocopyreloc -Wl,-dynamic-linker,/system/bin/linker -L$NDK/out/target/product/generic/obj/lib/"
export CFLAGS="-fno-exceptions -Wno-multichar -mthumb -mthumb-interwork -nostdlib -lc -ldl -lm -march=armv5te -mtune=xscale -msoft-float -mandroid -fPIC -mthumb-interwork -mthumb -mlong-calls -ffunction-sections -fstack-protector -fno-short-enums -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DOS_ANDROID -D__NEW__ -D__SGI_STL_INTERNAL_PAIR_H -I$SYSROOT/usr/include -I $A/system/core/include -I $NDKLIBS"
./configure --host=arm-eabi --with-ssl=$A/external/openssl
` I Podsumowanie wyjściowa jest taka:
configure: przystosowany do budowania curl/libcurl:
curl version: 7.26.0
Host setup: arm-unknown-eabi
Install prefix: /usr/local
Compiler: /home/tanco/Development/AOSP/2.3.3/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
SSL support: no (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls})
SSH support: no (--with-libssh2)
zlib support: enabled
krb4 support: no (--with-krb4*)
GSSAPI support: no (--with-gssapi)
SPNEGO support: no (--with-spnego)
TLS-SRP support: no (--enable-tls-srp)
resolver: default (--enable-ares/--enable-threaded-resolver)
ipv6 support: no (--enable-ipv6)
IDN support: no (--with-libidn)
Build libcurl: Shared=no, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
SSPI support: no (--enable-sspi)
ca cert bundle: /etc/ssl/certs/ca-certificates.crt
ca cert path: no
LDAP support: no (--enable-ldap/--with-ldap-lib/--with-lber-lib)
LDAPS support: no (--enable-ldaps)
RTSP support: enabled
RTMP support: no (--with-librtmp)
Protocols: DICT FILE FTP GOPHER HTTP IMAP POP3 RTSP SMTP TELNET TFTP
SONAME bump: yes - WARNING: this library will be built with the SONAME
number bumped due to (a detected) ABI breakage.
See lib/README.curl_off_t for details on this.
Pierwszą dziwną rzeczą, która przychodzi należy pamiętać, dlaczego protokół SSL nie jest zawarty w konfiguracji, ponieważ linker pokazuje bibliotekę pośrednią Wywoływana jest flaga wsparcia ss i ssl, ale po użyciu tego samego pliku curl_config.h w projekcie jni, który utworzyłem dla kompilacji (ponieważ ma on samodzielny plik Android.mk, można go skompilować poprzez proste rozpakowanie w folderze jni z android projektu, kopiując plik konfiguracyjny utworzony w AOSP źródła i nazywając NDK-build)
więc skompilować i uzyskać:
$ ndk-build
Compile thumb : curl <= url.c
In file included from /Projects/temp/testNDK/jni/lib/url.c:32:0:
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h: In function 'getpagesize':
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h:171:3: warning: nested extern declaration of '__page_size' [-Wnested-externs]
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h: In function '__getpageshift':
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h:175:3: warning: nested extern declaration of '__page_shift' [-Wnested-externs]
/Projects/temp/testNDK/jni/lib/url.c: At top level:
/Projects/temp/testNDK/jni/lib/url.c:57:2: error: #error "We can't compile without socket() support!"
make: *** [/Projects/temp/testNDK/obj/local/armeabi/objs/curl/lib/url.o] Error 1
Wielkie dzięki za pracę. Wziąłem twoją radę, ale zamiast pełnego sdk użyłem tylko samodzielnego toochaina, jak zalecono w przewodniku instalacji cURL. Następnie skopiowałem nagłówki openssl i pliki .so do folderów w toolchain i odpowiednio ustawiono LDFLAGS i CPPFLAGS. Prosta - z-ssl zrobiła sztuczkę, gdy raz ustawiono ją poprawnie. Więc na przyszłość: nie musisz korzystać z pełnego zestawu SDK systemu Android, możliwe jest również udostępnienie zestawu narzędzi. – domenukk
tak jest teraz, dwa + lata temu nie było możliwe do kompilacji poza AOSP – Tancho
Musiałem zmodyfikować polecenia tutaj na http://pastebin.com/qzxzc592 nie jestem pewien, czy jest to potrzebne dla wszystkich, ale – ruler501