Улучшенный Android NDK r4

Описание

Здесь выложены дистрибутивы Android NDK r4b, пересобранные мной из официальных исходников. Добавлена поддержка C++ exceptions, RTTI и Standard C++ Library (в частности, STL). Изменения небольшие, вы можете увидеть их в предлагаемом патче

Update: Готова новая версия android-ndk-r4-crystax-2! Список исправленных проблем:

Update 2: Готова новая версия android-ndk-r4-crystax-3! Включает важное исправление:

Update 3: Готова новая версия android-ndk-r4-crystax-4! Список исправленных проблем:

Скачать

Инструкции по сборке

Вы также можете собрать дистрибутив самостоятельно, если вас не устраивают по каким-либо причинам те версии, что собрал я. Для этого следуйте инструкциям ниже.

Необходимое ПО:

  • Для Windows, последняя версия Cygwin
  • GNU Make 3.81 или выше
  • GNU Makeinfo (наиболее свежая версия)
  • GIT (для скачивания исходников android toolchain)
  • Наиболее свежая версия GNU Libtool (automake, autoconf и т.д.)
  • GNU C/C++ 3.x или выше (для Windows, это должна быть именно 3.x, не 4.x)
  • Библиотека ncurses (в случае Cygwin это должен быть пакет ncurses-devel)
  • GNU flex (наиболее свежая версия)
  • Утилита patch. Скорее всего она уже установлена если вы используете Linux или Mac OS X; в Cygwin она должна быть установлена отдельно

Инструкции

  • Скачайте мой патч и сохраните его где-нибудь
  • Скачайте android-ndk-r4b для вашей платформы с официального сайта
  • Распакуйте полученный архив и перейдите в каталог android-ndk-r4b
  • Для пользователей Windows 7 и Vista: исправьте права только что распакованной папки. Наберите в командной строке:
    cmd /c "icacls . /grant Everyone:(F) /T"
  • Примените мой патч:
    patch -p1 <path-to-my-patch
  • Установите переменную окружения ANDROID_NDK_ROOT так, чтобы она указывала на текущий каталог:
    export ANDROID_NDK_ROOT=`pwd`
  • Для Windows пользователей: установите переменную окружения CC так, чтобы она указывала на GCC 3:
    export CC=gcc-3
  • Для Mac пользователей: если вы планируете использовать собранный пакет на предыдущих версиях Mac OS X (например, вы делаете сборку на Snow Leopard но планируете использовать ее также и на Leopard), необходимо выставить правильные переменные окружения CC и LDFLAGS. Если вам это не нужно, просто пропустите этот пункт. Иначе, наберите в терминале следующие строки:
    CC="gcc -isystem /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4"
    LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
    export CC LDFLAGS
          
    Это позволить собрать бинарные файлы, которые будут работать на Tiger и более поздних версиях; смените SDK на другой если минимальная версия должна быть не Tiger.
  • Скачайте исходники android toolchain:
    ./build/tools/download-toolchain-sources.sh --release=myrelease --package --over-http --verbose --for-date=2010-07-15
    Это может занять много времени в зависимости от скорости вашей сети. В конце концов, эта команда скачает исходники и запакует их в /tmp/android-ndk-toolchain-myrelease.tar.bz2
  • Запустите команду сборки:
    ./build/tools/rebuild-all-prebuilt.sh --verbose --package --toolchain-src-pkg=/tmp/android-ndk-toolchain-myrelease.tar.bz2
    Эта команда распакует исходники android toolchain (включая binutils, gcc и gdb), пропатчит их и запустит компиляцию. Это может занять довольно много времени в зависимости от вашей конфигурации, поэтому будьте терпеливы.
  • В конце, когда команда сборки завершится, она напечатает имя архива с собранными инструментами (что-то типа /tmp/android-ndk-prebuilt-20100716-linux-x86.tar.bz2, фактическое имя будет зависеть от текущей даты). Запустите команду:
    rm -Rf ./build/prebuilt
    tar xjvf /tmp/android-ndk-prebuilt-20100716-linux-x86.tar.bz2
    
  • Теперь вы можете попробовать протестировать вашу сборку. Соберите приложение hello-jni по стандартной инструкции (я модифицировал его так, что теперь там используется STL и исключения) и запустите на эмуляторе/устройстве
  • Наслаждайтесь!

Обратная связь

Bug tracker - здесь вы можете отслеживать статус текущих проблем. Пожалуйста, используйте этот адрес для сообщений о дефектах/пожеланиях.