android에curl을 추가하는 해결 방법

3552 단어 android늘다curl
curl은 유명한 소스 파일 전송 프로토콜 실현 소프트웨어로 HTTP, HTTPS, FTP 등 자주 사용하지 않는 프로토콜의 실현을 포함한다.curl의 최신 버전의 공식 원본 코드에는 사실android의 컴파일러 (Android.mk) 가 포함되어 있지만, 컴파일러를 통과하려면 작업이 필요합니다.내가 사용하는curl버전은 7.20.0이고android원본 코드버전은eclair2.1이다.우선curl을 external 디렉터리에 압축을 풀고 디렉터리 이름을curl로 변경합니다. (고치지 않아도 되지만android의 습관은 버전 번호를 가지고 고향에 가면 풍속을 따르는 것입니다.)(1) 우선 헤더 파일curl_ 만들기config.h.생성 방법은curl/Android에 있습니다.mk 파일 헤더의 주석에 설명이 있습니다.이 설명에 따라configure를 실행합니다.내가 사용하는 명령줄은 다음과 같다. (나는 x86 버전으로 컴파일되었지만, 우리의 목적은curl_config.h 파일을 생성하는 것뿐이기 때문에 x86이냐arm이냐는 사실은 같다.)

ANDROID_ROOT=`realpath ../..` && PATH="$ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin:$PATH" ./configure --host=x86-linux CC=i686-unknown-linux-gnu-gcc CPPFLAGS="-I $ANDROID_ROOT/external/curl/include/ -I $ANDROID_ROOT/external/curl -I $ANDROID_ROOT/out/target/product/eeepc/obj/STATIC_LIBRARIES/libcurl_intermediates -I $ANDROID_ROOT/system/core/include -I $ANDROID_ROOT/hardware/libhardware/include -I $ANDROID_ROOT/hardware/libhardware_legacy/include -I $ANDROID_ROOT/hardware/ril/include -I $ANDROID_ROOT/dalvik/libnativehelper/include -I $ANDROID_ROOT/frameworks/base/include -I $ANDROID_ROOT/frameworks/base/opengl/include -I $ANDROID_ROOT/external/skia/include -I $ANDROID_ROOT/out/target/product/eeepc/obj/include -I $ANDROID_ROOT/bionic/libc/arch-x86/include -I $ANDROID_ROOT/bionic/libc/include -I $ANDROID_ROOT/bionic/libstdc++/include -I $ANDROID_ROOT/bionic/libc/kernel/common -I $ANDROID_ROOT/bionic/libc/kernel/arch-x86 -I $ANDROID_ROOT/bionic/libm/include -I $ANDROID_ROOT/bionic/libm/include/i387 -I $ANDROID_ROOT/bionic/libthread_db/include -I $ANDROID_ROOT/external/openssl/include" CFLAGS="-fno-exceptions -Wno-multichar -march=i686 -m32 -fPIC -include $ANDROID_ROOT/system/core/include/arch/target_linux-x86/AndroidConfig.h -m32 -DANDROID -fmessage-length=0 -fno-strict-aliasing -Wno-unused -Winit-self -Wpointer-arith -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers" LIB="$ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/libgcc.a $ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/crtbegin.o $ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/crtend.o"
(2) configure에서 openssl을 찾을 수 없기 때문에 생성된 프로필은openssl을 사용하지 않는다.ssl을 사용하려면 lib/curl_를 수동으로 수정해야 합니다config.h와 src/curl_config.h, 매크로 정의 열기 HAVE_LIBSSL、 HAVE_OPENSSL_CRYPTO_H、HAVE_OPENSSL_ERR_H、HAVE_OPENSSL_PEM_H、 HAVE_OPENSSL_PKCS12_H、HAVE_OPENSSL_RSA_H、HAVE_OPENSSL_SSL_H、 HAVE_OPENSSL_X509_H、USE_OPENSSL、USE_SSLEAY (그러나 android는 openssl의 engine를 컴파일하지 않았으므로 매크로 정의 HAVE_OPENSSL_ENGINE_H를 열지 마십시오.) 매크로 정의 HAVE_MALLOC_H와 HAVE_IOCTL, 이 두 매크로는 Android_config.h에 정의가 있습니다. 주석을 달지 않으면 번역 과정에서 경고가 많습니다.
(3)curl/Android를 수정합니다.mk 파일, LOCAL_C_INCLUDES 변수 값에 external/openssl/include 추가, LOCAL_SYSTEM_SHARED_LIBRARIES 변수의 값에 libssl libz libcrypto가 추가됩니다.
자, 이제 컴파일할 수 있습니다:make curl ONE_SHOT_MAKEFILE=external/curl/Android.mk TARGET_PRODUCT=<...>하지만 상술한 안드로이드.mk 파일은libcurl을 정적 라이브러리로 컴파일합니다. 동적 라이브러리로 컴파일하려면 Android를 수정해야 합니다.mk 파일.

좋은 웹페이지 즐겨찾기