Estoy tratando de portar libCurl a android con soporte SSL, paso uno sería portar el rizo sin soporte SSL, supongo, así que comencé a hacerlo. pero me encuentro con un problema.portando libcurl en android con soporte ssl
como leo en el sitio web de desarrollo y en el archivo Android.mk, la parte difícil es configurar la marca primero. así que lo que hice es:
descargar el código fuente de Android (! y compilarlo ya que algunas de las librerías intermedios son necesarios)
Descargar cURL
de desempaquetado rizo en: {android_src}/externo/curl
crea el script configure para curl creando un archivo sh en la carpeta externa/curl con este contenido.
`
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
` Y el resumen de salida es la siguiente:
configure: Configurado para construir rizo/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.
Primera extraña cosa que viene a la mente es por qué SSL no está incluido en la configuración ya que el enlazador muestra la lib intermedia Se llama a s y ssl flag, pero después cuando uso el mismo archivo curl_config.h en el proyecto jni que creé para la compilación (dado que tiene un archivo Android.mk independiente, se puede compilar simplemente descomprimiendo en la carpeta jni de un proyecto androide, copiar el archivo de configuración creado en la fuente AOSP y llamando NDK-build)
así que compilar y me sale:
$ 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
Muchas gracias por su trabajo. He seguido tu consejo, pero en lugar de utilizar el SDK completo, solo utilicé la cadena de caracteres independiente tal como se indicó en la guía de instalación de CURL. Luego copié los encabezados de openssl y los archivos .so en las carpetas de la cadena de herramientas y configuré LDFLAGS y CPPFLAGS respectivamente. Un simple --with-ssl hizo el truco, una vez configurado correctamente. Por lo tanto, para referencia futura: no tiene que usar el SDK completo de Android, la cadena de herramientas también es una posible forma. – domenukk
ese es el caso ahora, hace dos años o más no era compilable fuera de AOSP – Tancho
Tuve que modificar los comandos aquí a http://pastebin.com/qzxzc592 no estoy seguro si eso es necesario para todos, aunque – ruler501