This project has been on hold since 2016
All the data on this site is still available (and will stay available) but not up-to-date anymore
You might like to check Dmitry Moskalchuk's portfolio for his other projects

Описание

Перед вами - дистрибутив CrystaX NDK, разработанный как прозрачная замена Android NDK (Native Development Kit) от Google. По сравнению с Google NDK, CrystaX NDK предоставляет ту же самую функциональность, а кроме того несколько серьезных улучшений и огромное количество более мелких исправлений.

Главная цель проекта CrystaX NDK - дать Android разработчикам возможность писать код, соответствующий основным стандартам, и тем самым повысить их продуктивность. Действительно, время на разработку уменьшается очень сильно в том случае, когда разработчик просто пишет код, соответствующий стандартам, и сразу получает возможность запускать его на многих платформах (таких, как iOS, OS X, Windows, Linux и т.д.) вместо того, чтобы отвлекаться на особенности Android и пытаться их обойти; а в тяжелых случаях приходится полностью переписывать код для Android, повторно реализуя уже написанную и отлаженную логику работы.

К сожалению, Android libc (Bionic) предоставляет очень ограниченную функциональность (которая к тому же меняется от версии к версии), поэтому разработчики вынуждены постоянно иметь в виду все ее особенности, определяя динамически версию Android на устройстве и применяя те или иные способы обхода. Используя CrystaX NDK, вы можете забыть о подобных проблемах, т.к. CrystaX NDK предоставляет дополнительную библиотеку libcrystax, которая скрывает отличия libc от версии к версии или даже предоставляет собственную реализацию стандартных функций из libc. Наиболее важным следствием такого подхода является то, что с помощью libcrystax приложение получает возможность работать на всех версиях Android, не меняя поведения в зависимости от версии операционной системы.

Другой целью проекта CrystaX NDK является желание привнести дополнительные интересные возможности в мир нативной разработки под Android. Например, возможность разрабатывать приложения на Objective-C и других языках программирования.

Первоначально это был личный проект Дмитрия Москальчука, и единственной причиной для его создания послужило желание добавить полноценную поддержку C++ в Android NDK от Google (на тот момент отсутствующую). Однако со временем выяснилось, что не хватает еще много чего и к определенному моменту сложилось понимание, что постепенное улучшение CrystaX NDK - это самый лучший способ улучшить ситуацию в мире нативной разработки под Android. С момента старта проекта в 2009-ом году, огромное количество коммерческих и open-source проектов воспользовалось CrystaX NDK для портирования и разработки под Android с минимальными усилиями.

На сегодняшний день CrystaX NDK предоставляет много интересных возможностей для облегчения нативной разработки под Android. Ключевые возможности CrystaX NDK:

Возможности

  1. Полная поддержка широких символов (wide characters)

    Широкие символы wchar_t являются неотъемлемой частью языков C и C++, а также их стандартных библиотек. Так, стандартная библиотека C предоставляет набор функций для работы с широкими строками, таких как wcsnlen, wcsncasecmp, wcsncmp и другие; стандартная библиотека C++ предоставляет wchar_t специализации стандартных C++ классов, таких как std::basic_string, std::basic_ostream, std::basic_regex и т.д. К сожалению, Android libc (Bionic) либо не поддерживает широкие символы вовсе, либо поддерживает их в очень ограниченном виде (в зависимости от версии Android).

    Используя же CrystaX NDK, вы получаете полноценную, соответствующую стандартам C и C++, поддержку широких символов, включая возможность конвертации из мультибайтных кодировок в широкосимвольные и обратно. Вы можете легко портировать существующий код или писать новый, использующий широкие символы, строки, потоки и регулярные выражения, не отвлекаясь на особенности Android libc.

    Пример

  2. Полная поддержка C локалей

    Android libc (Bionic) не включает в себя поддержку интернационализации, поэтому единственный способ использовать локализованный ввод/вывод - реализовать всю поддержку интернационализации в Java коде и вызывать его из нативной части через JNI. Этот подход, очевидно, вносит дополнительные накладные расходы, но это единственный выход, если вы используете Android NDK от Google.

    Используя же CrystaX NDK, вы получаете поддержку интернационализации на нативном уровне. Теперь, чтобы использовать локализованный ввод/вывод, просто вызовите стандартную функцию setlocale, и все последующие вызовы стандартных функций будут использовать эту локаль в своей работе. CrystaX NDK также поддерживает так называемые "extended locales" (часть IEEE Std 1003.1, 2013 Edition), предоставляя, в дополнение к стандартным, функции с параметром локали: printf_l, strftime_l, strfmon_l и другие.

    Пример

  3. Полная поддержка стандартных математических функций, включая комплексные и типо-независимые

    Стандарт ISO C определяет заголовочные файлы <tgmath.h> и <complex.h>. В Android NDK от Google файл <complex.h> появился только в r10 и только для приложений, работающих на Android 5.0 (платформа android-21); что же касается типо-независимых математических функций, то они не поддерживаются вовсе.

    Используя CrystaX NDK, вы получаете полноценную поддержку всех стандартных математических функций, включая комплексные и типо-независимые, вне зависимости от версии Android. Тут нечего много описывать - просто используйте их как это определено в стандарте ISO C и наслаждайтесь!

  4. Наиболее свежие средства разработки

    CrystaX NDK наряду со стабильными версиями включает в себя наиболее свежие версии компиляторов GCC и Clang. Это позволяет разработчикам использовать новые языковые возможности (такие как новые C++11/C++14). Все компиляторы собраны с включением различных высоко- и низко-уровневых оптимизаций. Это позволяет генерировать наиболее эффективный код под целевые аппаратные платформы.

  5. Поддержка C++11/C++14

    Благодаря тому, что CrystaX NDK включает наиболее свежие версии GCC и Clang, в нем поддерживаются очень многие возможности C++11/C++14. Детальное описание можно найти на страницах C++11 Support in GCC, C++14 Support in GCC и C++ Support in Clang.

  6. Полная поддержка стандартной C++ библиотеки

    Также CrystaX NDK предоставляет полностью рабочую стандартную библиотеку C++11, включая классы std::thread, std::mutex, функции/классы из std::chrono, функции std::stol, std::stoul и т.д. Эти классы и функции недоступны (или доступны с ограничениями) в Android NDK от Google из-за недостающей функциональности в Android libc (Bionic).

    В CrystaX NDK мы обращаем особое внимание на полную реализацию стандартной библиотеки C++. Мы исправили все проблемы, связанные с недоступностью стандартных классов, поэтому в CrystaX NDK стандартная библиотека C++ доступна вне зависимости от того, какая реализация используется - GNU libstdc++ или LLVM libc++.

    Кстати, LLMV libc++ в CrystaX NDK является полноценным "гражданином", наравне с GNU libstdc++, поэтому вы вольны использовать любую из них, в зависимости от ваших предпочтений. По умолчанию используется GNU libstdc++.

    Пример

  7. Библиотеки Boost C++ "из коробки"

    Мы предоставляем собранные библиотеки Boost C++ (равно как и header-only) сразу "из коробки". Использовать Boost становится настолько легко, насколько это возможно. Не надо больше собирать их самостоятельно, бороться с сообщениями об ошибках при их сборке и т.д. Наиболее важно здесь то, что библиотеки Boost работают намного лучше с CrystaX NDK, чем они же самые, но собранные с помощью Android NDK от Google - просто потому, что в CrystaX NDK они используют значительно более соответствующую стандартам базу (да, это libcrystax, сердце CrystaX NDK).

    Здесь вы можете найти пример того, как начать использовать Boost в вашем Android проекте.

  8. Поддержка Objective-C и Objective-C++

    Единственные языки программирования, доступные для разработки в Google NDK, это C и C++. CrystaX NDK дает возможность использовать также Objective-С и Objective-C++ в дополнение к C и C++.

    В CrystaX NDK 10.2.0 мы добавили поддержку Objective-C v2 runtime и начальных фреймворков (Foundation и CoreFoundation).

    Здесь вы можете увидеть простой пример использования Objective-C для разработки под Android. В двух словах, , просто добавьте исходники с расширениями .m (Objective-C) или .mm (Objective-C++), укажите их в LOCAL_SRC_FILES в Android.mk и добавьте "APP_OBJC := cocotron" в Application.mk.

  9. Огромное количество исправлений и улучшений реализации стандартной библиотеки C

    Не секрет, что реализация Android libc (Bionic) содержит множество ошибок. К примеру, одной из самых неприятных ошибок является реализация strtod, корректно разбирающей только простейшие форматы входных строк, и выдающей ошибочные результаты для всех остальных, требуемых по стандарту ISO C. Некоторые из этих ошибок исправляются со временем, некоторые нет. Тем не менее, даже в случае исправления это никак не затрагивает предыдущие версии Android, на которых эти ошибки так и остаются неисправленными. Это создает значительные затруднения разработчикам, вынужденным жить с этим и придумывать обходные пути.

    В CrystaX NDK мы используем собственные реализации таких (ошибочно работающих) функций в libcrystax и делаем это прозрачным для разработчика образом, так что разработчик даже не знает, что реализация конкретной функции берется из libcrystax; конечно же, за исключением того факта, что поведение функции становится правильным. Также, используя CrystaX NDK, вы никогда не столкнетесь с ситуацией, когда подобное исправление доступно только для отдельных версий Android. Когда мы вносим исправления в libcrystax, мы убеждаемся, что это работает на всех версиях Android.

  10. Продолжение следует...

    Не стесняйтесь связываться с нами, если вы не видите некоторых интересных возможностей в этом списке. Вы можете также использовать наш багтрекер для сообщений об ошибках. И конечно же, мы всегда рады помощи!

Лицензия

Содержимое 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' лицензией.

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

Мы стараемся сделать CrystaX NDK как можно лучше, непрерывно работая над ним и постоянно улучшая. Тем не менее, мы не можем гарантировать отсутствие проблем - как не может никто в этом мире. Поэтому в случае, если вы столкнетесь с проблемой, мы будем очень признательны, если вы сообщите нам; мы же постараемся исправить ее как можно скорее.

Вы также можете задать вопрос в публичной группе рассылки, воспользовавшись web интерфейсом либо просто послав e-mail на адрес crystax-ndk@googlegroups.com. Это пре-модерируемая группа, поэтому не беспокойтесь, если не увидите отосланный вопрос немедленно; дайте нам немного времени, чтобы увидеть его и одобрить.

Наконец, вы можете связаться с нами напрямую, если по каким-либо причинам варианты выше неприемлемы.

Скачать

Файл Размер SHA256
crystax-ndk-10.3.2-windows-x86.exe 740.503 MB 610af4c541d0831...fe842f3434b773
crystax-ndk-10.3.2-windows-x86_64.exe 795.952 MB 3935afe8348fdea...fbc3e205ac376a
crystax-ndk-10.3.2-darwin-x86.tar.xz 733.775 MB 55ac4d7dae81c5e...0f2b506c530c61
crystax-ndk-10.3.2-darwin-x86_64.tar.xz 704.849 MB 382bc6bf8bf4fb1...5f5c9975d3d7bf
crystax-ndk-10.3.2-linux-x86.tar.xz 699.613 MB aa29fe97e283e88...ac426042b3c952
crystax-ndk-10.3.2-linux-x86_64.tar.xz 706.139 MB 7305b59a3cee178...8d68157356c4c0

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

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

Настройка рабочего окружения для сборки:

Выполните настройку рабочего окружения, как это указано на сайте AOSP, за исключением части, касающейся Java:

ВНИМАНИЕ!!! Сборка Windows версии CrystaX NDK возможна только на Linux (используется кросс-сборка). Сборка на Windows не тестировалась и не поддерживается.

Сборка NDK

  • Скачайте build script и запустите его.
    Например, так:
    \curl -sSL http://crystax.net/download/ndk-crystax-r10-build.sh | /bin/bash
    Сборка займет много времени, вплоть до нескольких часов. По окончании сборки скрипт выведет на экран путь к архиву, содержащему только что собранный NDK release.
  • Это все! Используйте этот архив как замену Google NDK!

Back
Home
Map
Back
Home
Map

Наши авторы: