Статья предназначена для разработчиков Android NDK, которые собираются работать с замечательной библиотекой libcURL и имеют в своем распоряжении ее исходники для пересборки в статическую библиотеку.
Автор не претендует на абсолютно правильное решение проблемы портирования этой библиотеки, а лишь делится своим опытом.
Прошу всех интересующихся под катом.
Преамбула
Я разрабатываю свои собственные приложения для Android в Windows 7, используя Eclipse Indigo для Java-оболочки собственного приложения, скомпилированного Cygwin. Собственная часть написана на C++ с включением кроссплатформенных библиотек C и возможностью отладки в Visual Studio 2010 Express. Недавно во время разработки возникла необходимость скачивать картинки из интернета.Судя по моему предыдущему опыту разработки под Windows, я не видел ничего лучше, чем libcURL, поэтому решил сосредоточиться на ней.
Басня
Первый сюрприз обнаружился, когда я начал скачивать исходники с сайта разработчика: Curl.haxx.se/download.htm .Для Android доступна только собранная версия.
Не беда, я подумал: «Как-нибудь соберу сам», скачал исходники (curl-7.27.0).
Был еще не поздний вечер, и я планировал за час закончить это задание и перейти к более интересным занятиям.
Я быстро просмотрел файл Android.mk и поместил все в свой Android.mk, чтобы собрать это чудо.
В cygwin стали появляться очень неприятные ошибки — «CURL_SIZEOF_LONG определение отсутствует!» и подобные им.
Помогло найти решение проблемы: stackoverflow.com/questions/4952169/using-curl-in-android .
Сделал все как советовали, но ошибки с отсутствующими макросами остались.
В итоге я понял, что продолжать экспериментировать самостоятельно глупо, поэтому пошёл читать статьи типа: thesoftwarerogue.blogspot.ru/2010/05/porting-of-libcurl-to-android-os-using.html .
Было уже далеко за полночь, поэтому нам пришлось закончить на такой не позитивной ноте.
Утром на свежую голову я начал читать вышеизложенную статью и понял, что сама концепция сборки противоречит здравому смыслу.
Для сборки вам необходимо создать curl_config.h под полным исходным кодом Android! Читать дальше было просто бессмысленно, тем более, что найденные варианты этого волшебного заголовка не позволили нам избежать вышеописанных ошибок в cygwin. Твердо решив для себя, что этот путь ошибочен, я начал развивать заброшенную идею сборки просто из исходников, отброшенную накануне.
Нашёл статью, где друг очень любезно сказал, что это можно сделать и выложил.
скомпилированную версию blog.glowinteractive.com/2011/11/porting-curl-to-android-as-static-library .
Спасибо, что хотя бы предложили мне вручную создать заголовок конфигурации, что я и сделал.
Я взял config-mac.h, превратил его в config-android.h и включил в setup.h. И о чудо, обойдя ошибки и модифицировав config-android.h, я смог собрать библиотеку из исходников и протестировать нужную мне работоспособность (скачав картинки из интернета).
Инструкция по модификации:
в файле include/curl/curlbuild.h мы нашлидобавить раздел#elif defined(__GNUC__)
# else
# define CURL_SIZEOF_LONG 4
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_FORMAT_OFF_T "%lld"
# define CURL_SIZEOF_CURL_OFF_T 8
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
ты можешь позвонить ей
#elif defined(ANDROID)
следующий после
elif defined(__x86_64__) || defined(__ppc64__).
в lib/setup.h мы нашли
#ifdef __VXWORKS__
# include "config-vxworks.h"
#endif
и добавить после него
#ifdef __GNUC__
# include "config-android.h"
#endif
Создайте lib/config-android.h из lib/config-mac.h. в lib/config-android.h изменять
#define OS "mac"
на
#define OS "android"
изменять
#define HAVE_IOCTL_FIONBIO 1
на
#define HAVE_FCNTL_O_NONBLOCK
Теги: #разработка для Android ndk #libcurl #C++ #Разработка для Android
-
Успешная Статья Для Вашего Веб-Бизнеса
19 Oct, 24 -
Играйте Как Гейм-Дизайнер
19 Oct, 24 -
Вебмани На Mac
19 Oct, 24 -
Внешний Кадровый Резерв - Это...
19 Oct, 24 -
Статистика Использования Ос
19 Oct, 24 -
Легкий Экспорт В Excel Xml
19 Oct, 24