le portage de libcurl sur android avec le support ssl
J'essaie de port libCurl pour android avec le support SSL,
la première étape serait de port de la boucle sans le support ssl, je suppose que j'ai donc commencé à faire cela. mais je rencontre un problème.
comme je l'ai lu sur le dev web et en le Android.mk fichier, la partie la plus difficile est la configuration de la première. donc, ce que j'ai fait est :
-
Télécharger le code Source Android (et le compiler! depuis certains des intermédiaires libs sont nécessaires)
-
Télécharger cURL
-
décompresser curl en vertu de l' : {android_src}/externe/curl
-
faire le script de configuration pour le roulage en la création d'une sh de fichiers externes/curl dossier avec ce contenu.
`
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
`
Et la sortie de résumé est celui-ci :
configurer: Configuré pour construire 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.
Première chose étrange qui vient à l'esprit est pourquoi SSL est pas inclus dans le fichier de configuration depuis l'éditeur de liens montre l'intermédiaire du syndicat et de la prise en charge ssl indicateur est appelé, mais après quand j'utilise le même curl_config.h fichier dans la jni projet que j'ai créé pour le construire (car il a une autonome Android.mk fichier il peut être compilé simplement en ouvrant dans la jni dossier d'un projet android, copier le fichier de configuration créé dans le PSBA source et de l'appel de ndk-build)
donc je compile et j'obtiens :
$ 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
Vous devez vous connecter pour publier un commentaire.
Voici la solution, mis à jour à NDK8c
étape zéro: télécharger et fixer le Android NDK
Je ne sais pas comment, mais le ndk a une très intéressante faille, qui (dans mon oppinion) ne vous autorise pas à compiler beaucoup de choses, donc, pour être en mesure de compiler OpenSSL vous avez besoin de faire un petit correctif, extrait de la ndk8c où vous gardez vos outils, et ensuite modifier le fichier :
android-ndk-r8c/build/gmsl/__gmsl
ligne 512 :
changement de ligne
avec la ligne
Et vous êtes bon pour aller!
la première étape : Télécharger OpenSSL et de les compiler pour Android :
soit compiler un portage de la version trouvée ici
ou Télécharger le 1.0.0 c version de OpenSSL et puis le compiler pour android à l'aide de la notice fournie dans le github j'ai fait un lien pour la version compatible avec Android
Donc, la prochaine étape est d'obtenir le libssl.donc et libcrypto.donc
et mettez le dans le dossier NDK pour un accès facile, donc, de les copier à partir de
à
de cette façon, lors de la compilation, vous pouvez inclure les libs à l'aide d'un simple commutateur liens
-lssl -lcrypto
Étape deux : obtenir Curl de la source la plus récente pour ici
Ouvrir le fichier dans Docs/INSTALL et suivez les étapes nécessaires pour rendre l'autonome de la chaîne et de le mettre dans votre dossier souhaité, puis la partie la plus délicate, j'avais besoin de android du code source pour la config pour continuer, même si j'ai autonome compilé openssl, vous pouvez inclure les fichiers d'en-tête à partir de là aussi, dans anycase c'est plus compliqué que la version donc, vous choisissez ce que vous faites, Je n'ai pas choisi d'échapper à eux de sorte que vous pouvez aller à Google PSBA site et aller à travers les étapes pour créer et initialiser l'environnement.
de sorte qu'il serait quelque chose comme :
1.télécharger,
aller à la racine du code source et de l'exécution :
~: build/envsetup.sh; déjeuner 1; make;
Donc, finalement, nous devons compiler curl avec le support SSL, donc,
Étape trois
extrait de curl dans le dossier désiré
(J'ai un spécifique désir de la désactivation de tout, sauf de http/s pour garder la bibliothèque aussi petites que possible, ce qui signifie qu'environ ~300k, si vous voulez plus de protocoles dans votre lib, enlever l'option --disable-protocole pour le protocole désiré)
exécutez la commande suivante :
Donc, finalement, vous avez :
statique :
et partagé :
Donc, c'est ça.. prenez le fichier, et la compilation de loin 🙂
J'aime la façon d'utiliser le Panneau de construction d'un tel bibliothèques statiques. Il y a plein de script ici, - il vous suffit de l'exécuter et saisissez le résultat. Exemple: https://gist.github.com/VictorLaskin/1c45245d4cdeab033956
Tel script:
compilé libs
Cette version est en utilisant les dernières NDK 10e et le cliquetis de la chaîne.
Il est en poste avec plus de détails ici: http://vitiy.info/dockerfile-example-to-compile-libcurl-for-android-inside-docker-container/
J'espère que cela aidera quelqu'un de ne pas perdre un temps précieux.
Étapes de la compilation de libcurl.donc, avec le support de ssl pour android jni peut être trouvé ici :
http://ieroot.com/2015/03/29/1728.html
J'ai lutté pendant une semaine pour comprendre cela.
Demander si toutes les questions. Je vais vous répondre dès que possible.