Tôi đang cố gắng chuyển libCurl sang android với hỗ trợ SSL, bước một là chuyển cổng curl mà không cần hỗ trợ ssl Tôi đoán vậy nên tôi bắt đầu thực hiện điều đó. nhưng tôi gặp rắc rối.porting libcurl trên android với hỗ trợ ssl
khi tôi đọc trên trang web của nhà phát triển và trong tệp Android.mk, phần khó khăn là định cấu hình thực hiện trước. vì vậy những gì tôi đã làm là:
Tải về Android Source code (! và biên dịch nó kể từ một số các libs trung gian là cần thiết)
Tải cURL
unpack curl dưới: {android_src}/external/curl
tạo tập lệnh cấu hình để cuộn tròn bằng cách tạo tệp sh trong thư mục bên ngoài/thư mục có nội dung này.
'
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
' Và tóm tắt đầu ra là cái này:
cấu hình: Cấu hình để xây dựng 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.
điều lạ đầu tiên mà đến để nhớ là tại sao SSL không được bao gồm trong cấu hình kể từ khi trình liên kết hiển thị cho lib trung gian s và hỗ trợ ssl cờ được gọi, nhưng sau khi tôi sử dụng cùng một tập tin curl_config.h trong dự án jni mà tôi tạo cho xây dựng (vì nó có một tập tin Android.mk độc lập nó có thể được biên dịch đơn giản bằng cách giải nén trong thư mục jni của một dự án android, sao chép các tập tin cấu hình được tạo ra trong nguồn AOSP và gọi ndk-build)
vì vậy tôi biên dịch và tôi nhận được:
$ 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
Cảm ơn rất nhiều về Công việc của bạn. Tôi đã đưa ra lời khuyên của bạn, nhưng thay vì sdk đầy đủ, chỉ sử dụng quá độc lập như được đề cập trong hướng dẫn cài đặt cURL. Sau đó, tôi sao chép các tiêu đề openssl và .so tập tin vào các thư mục trong toolchain và thiết lập LDFLAGS và CPPFLAGS tương ứng. Một thao tác đơn giản --with-ssl đã thực hiện thủ thuật, một khi đã thiết lập một cách đúng đắn. Vì vậy, để tham khảo trong tương lai: Bạn không cần phải sử dụng Android SDK đầy đủ, toolchain là một cách có thể là tốt. – domenukk
đó là trường hợp bây giờ, hai năm trước đây nó không phải là compilable bên ngoài của AOSP – Tancho
Tôi đã phải sửa đổi các lệnh ở đây để http://pastebin.com/qzxzc592 không chắc chắn nếu đó là cần thiết cho tất cả mọi người mặc dù – ruler501