Sto provando a portare libCurl ad Android con supporto SSL, il primo passo sarebbe quello di portare il ricciolo senza supporto ssl immagino quindi ho iniziato a farlo. ma ho incontrato un problema.porting libcurl su android con supporto ssl
come ho letto sul sito Web dev e nel file Android.mk, la parte difficile è la configurazione del make prima. così quello che ho fatto è:
Scarica il codice sorgente di Android (! e compilarlo dal momento che alcune delle librerie intermedi sono necessari)
Scarica cURL
unpack arricciatura: {android_src}/esterno/arricciatura
rendere lo script di configurazione per arricciare creando un file sh nella cartella esterna/curl con questo contenuto.
`
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
` e la sintesi di uscita è questa:
di configurazione: Configurato per costruire ricciolo/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.
prima cosa strana che viene è perché la SSL non è inclusa nella configurazione poiché il linker mostra la libreria intermedia viene chiamato il flag di supporto s e ssl, ma dopo quando uso lo stesso file curl_config.h nel progetto jni che ho creato per la build (poiché ha un file Android.mk autonomo può essere compilato semplicemente decomprimendo nella cartella jni di un progetto Android, la copia del file di configurazione creato nel sorgente AOSP e chiamando NDK-build)
così posso compilare e ottengo:
$ 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
Grazie mille per il tuo lavoro. Ho preso il tuo consiglio ma invece del sdk completo, ho usato solo la toochain standalone come consigliato nella guida all'installazione di cURL. Quindi ho copiato le intestazioni openssl e i file .so nelle cartelle nella toolchain e ho impostato rispettivamente LDFLAGS e CPPFLAGS. Un semplice --with-ssl ha fatto il trucco, una volta impostato correttamente. Quindi per riferimento futuro: non è necessario utilizzare l'SDK Android completo, anche la toolchain è un modo possibile. – domenukk
questo è il caso ora, due anni fa non era compilabile al di fuori di AOSP – Tancho
Ho dovuto modificare i comandi qui per http://pastebin.com/qzxzc592 non so se è necessario per tutti se – ruler501