Новый CrystaX NDK 10.3.2 доступен для скачивания, предлагая многочисленные исправления и улучшения; скорее всего, вам стоило бы попробовать новую версию вместо устаревшей.
Описание
Здесь выложены дистрибутивы Android NDK r7, пересобранные мной из официальных исходников. Начиная с NDK r5, Google добавил поддержку С++ exceptions, RTTI и STL в свой NDK. Это очень хорошо, но все еще недостаточно для многих, включая меня. Начиная с r5-crystax-1, основной целью этого проекта будет улучшение официального NDK (в конце-концов, это наилучший способ добиться включения таких улучшений в mainline - как это было с поддержкой полноценного C++ в Google NDK)
Улучшения в CrystaX NDK:
- Wide characters.
Google NDK не поддерживает wide chars - ни для C ни для C++. Используя же CrystaX NDK вы получаете полноценную поддержку wchar. Теперь вы можете легко портировать существующий код, содержащий работу с wide characters/strings/streams или написать новый. - Новый 4.6.3 toolchain
Начиная с r7-crystax-1, CrystaX NDK содержит две версии компилятора (toolchain): 4.4.3 (старый, такой же как и в Google NDK) и 4.6.3 (новый).
Новый toolchain содержит GCC 4.6.3 с включенным Graphite framework позволяющим gcc производить высокоуровневые оптимизации.
По умолчанию 4.6.3 toolchain не используется. Это сделано для совместимости с Google NDK. Чтобы включить его для вашего приложения, просто добавьте следующую строчку в Application.mk:APP_TOOLCHAIN_VERSION := 4.6.3
- Поддержка C++11 (известного также как C++0x)
Google NDK предлагает к использованию GCC 4.4.3 который, безусловно, весьма неплох, но не поддерживает некоторые современные возможности. Одна из таких возможностей - поддержка нового международного стандарта известного как C++11 (C++0x). GCC 4.4.3 поддерживает очень ограниченный набор возможностей C++0x.
Используя CrystaX NDK вы можете начать использовать многие возможности C++0x прямо сейчас. Конечно же, GCC 4.6.3 еще не поддерживает полностью C++11 но GCC team работает над этим очень интенсивно и поэтому он уже поддерживает довольно много новых возможностей (лямбды, decltype, auto и много другого). Вы можете просмотреть полный список на GCC C++ Support page.
Чтобы начать использовать C++0x в вашем проекте, добавьте следующую строку в Application.mk:APP_USE_CPP0X := true
Обратите внимание, что в этом случае неявно будет подключен 4.6.3 toolchain. - Поддержка Objective-C
Google NDK поддерживает только C и C++ для разработки. Начиная с r7-crystax-4, CrystaX NDK поддерживает дополнительно Objective-C. Это экспериментальная возможность, но core language работает уже хорошо. Конечно же, core language недостаточно; люди, пишущие на Objective-C, используют библиотеки типа Cocoa (в девичестве NeXTSTEP/OpenStep). Я понимаю это и не останавливаюсь на достигнутом. В моих планах - портирование GNUStep на Android, однако это непростая задача и она не может быть выполнена быстро. Тем временем, я полагаю, многие люди смогут начать пользоваться Objective-C как есть.
Чтобы начать использовать Objective-C в вашем проекте, просто добавьте исходные файлы с расширением .m (Objective-C) или .mm (Objective-C++) и укажите их в списке LOCAL_SRC_FILES в Android.mk. - Статический анализ кода
Android NDK использует GCC, который весьма неплохо анализирует код и предупреждает о потенциальных ошибках (особенно с опциями -Wall -Wextra) но, как каждый разработчик знает, не бывает достаточно проверок кода. На самом деле, иногда мы делаем абсолютно глупые ошибки и пропускаем их в production. Для уменьшения количества таких ошибок опытные разработчики используют статические анализаторы кода. Существует довольно много такого рода инструментов (open source и коммерческих) поэтому выбор не прост.
Проект Clang предлагает анализатор кода который показывает себя хорошо во многих ситуациях. Это тот же анализатор, который известен Apple разработчикам через "Build and analyze" меню в XCode. С CrystaX NDK вы можете начать использовать его для Android. Для этого вам нужно установить Clang и удостовериться что скрипт 'scan-build' из пакета Clang доступен из командной строки. Далее, запустите сборку вашего проекта:ndk-build ANALYZE=1
Я планирую добавить поддержку и других анализаторов но пока нет никаких конкретных планов на это. - Продолжение следует...
На самом деле, если вы не видите некоторых фич, вы можете попросить меня об этом! Используйте мой issue/bug tracker чтобы сообщить обо всех проблемах или пожеланиях. Я с радостью возьмусь за реализацию востребованных фич. И, конечно же, патчи с готовыми исправлениями/улучшениями приветствуются!
Лицензия
Содержимое CrystaX NDK покрывается различными open-source лицензиями. Более детально можно узнать, заглянув в каждый интересующий файл и прочитав copyright disclaimer.
Обратите внимание, что CrystaX NDK дистрибутивы также содержат уже собранные двоичные файлы - компилятор, линкер и т.д. Их исходные коды доступны на GitHub-е (вы можете использовать сборочный скрипт, чтобы скачать их автоматически).
GCC и сопутствующие инструменты (GDB, binutils и т.д.) покрываются либо GNU General Public License (GPL), либо GNU Lesser General Public License (LGPL). Вы можете найти более детальную информацию о них в файлах COPYING и COPYING.LIB, находящихся в каталогах $NDK/toolchains/$tc/prebuilt/$system.
Набор инструментов LLVM/Clang покрывается LLVM "BSD" лицензией.
По существу, правила лицензирования такие же, как у Android NDK от Google - т.е. разрешается любое использование, как коммерческое, так и некоммерческое. Единственное добавление к этим правилам - это CrystaX-специфичный код, который покрывается разрешительной 'BSD 2-clause' лицензией.
Скачать
Инструкции по сборке
Вы также можете собрать дистрибутив самостоятельно, если вас не устраивают по каким-либо причинам те версии, что собрал я. Для этого следуйте инструкциям ниже.
Настройка рабочего окружения для сборки:
Следуйте инструкциям с сайта AOSP за исключением части, касающейся Java.ВНИМАНИЕ!!! Начиная с версии r5, NDK может быть собран только на Linux/Mac машинах. Сборка на Windows более не поддерживается! Тем не менее, Windows версия может быть собрана на Linux используя так называемый "cross-canadian build". Для этого вам нужно установить пакет mingw32; сборочный скрипт автоматически определит его наличие и соберет Windows версию автоматически.
Инструкции
- Скачайте сборочный скрипт и запустите его:
wget -O - http://crystax.net/download/ndk-crystax-r7-build.sh | /bin/sh
Это может занять довольно много времени, вплоть до нескольких часов. По завершении работы скрипт выведет на экран путь к архиву содержащему NDK release. - Используйте этот архив вместо Google NDK