This project has been on hold since 2016.
All the data on this site is still available (and will stay available) but not actual anymore.
Запущена кампания по сбору средств
24.03.2015 11:12

Меня зовут Дмитрий Москальчук и я автор CrystaX NDK - Native Development Kit для Android.

Я начал этот проект в 2009 году, добавив поддержку C++ в Android NDK от Google (первые версии Android NDK от Google не поддерживали C++) - как языковое ядро, так и стандартную библиотеку C++. Первая версия CrystaX NDK очень быстро стала популярной, т.к. очень многим людям требовалась поддержка C++ чтобы иметь возможность запускать их приложения/библиотеки на Android без переписывания их на Java. Google добавил поддержку C++ такого уровня в свой NDK почти два года спустя. К этому моменту мне стало ясно, что не хватает еще очень многого для нормальной разработки под Android, поэтому я переформулировал цель проекта с "Android NDK с поддержкой C++" на "Улучшенный Android NDK" и продолжил работать над ним.

Я работаю над этим проектом уже пять лет, постоянно добавляя новые возможности и делая нативную разработку под Android более удобной. Два года назад ко мне присоединился Александр Жуков и с тех пор мы работаем над проектом совместно. Все это время мы вели проект на собственные средства, зарабатывая деньги другими способами (выполняя заказную разработку для других коммерческих проектов) и тратили их на CrystaX NDK. В силу вышесказанного, работа над CrystaX NDK велась в свободное время, и поэтому проект не достиг тех высот, каких мог бы. Восемь месяцев назад мы отказались от всех сторонних контрактов и начали работу над CrystaX NDK в режиме full time. За это время мы достигли значительных результатов. Вы можете ознакомиться с ними на страничке NDK.

Мы планируем превратить CrystaX NDK в полноценный всеобъемлющий набор инструментов для разработки под Android, позволяющий разработчикам использовать их любимые языки программирования, фреймворки и библиотеки - иными словами, сделать Android дружелюбным к разработчикам без разделения их на первосортных (Java) и остальных.

Проблемы

Нативная разработка под Android поддерживается очень плохо:

  • Android libc далека от того, чтоб быть названной "стандартной". Она просто не поддерживает много вещей, требуемых по стандарту - таких как широкие символы (wide characters), локали и т.д. Это делает портирование существующего кода с других платформ весьма сложным.
  • Также Android libc нестабильна - многие функции, предоставляемые libc, реализованы лишь частично или с ошибками. Нет нужды объяснять как важно работать на стабильном базисе и почему очень плохо, когда это не так - недели или даже месяцы отладки вам гарантированы.
  • Даже если некоторые проблемы чинятся в новых версиях Android, предыдущие версии не получают этих исправлений для системных библиотек. Google предоставляет обратную совместимость и исправления только для Java API.
  • Нет хороших инструментов для нативной отладки. Хоть gdb/lldb и поддерживают удаленную отладку, практически нормальная пошаговая отладка нативного кода на Android почти что невозможна.
  • Почти вся важная для приложений функциональность доступна только через Java API. Это означает весь UI, web, services, network management API, In-App Purchasing и т.д.
  • Нет поддержки других языков программирования, кроме C и C++. Это становится особенно важным сегодня, когда Android распространяется все больше и больше, работая на многих довольно мощных устройствах (не только телефонах; сегодня это также планшеты, умные телевизоры, автомобильные навигаторы и т.д.)

Решение

Мы уже исправили множество подобных проблем в нашем CrystaX NDK и мы намерены продолжать и чинить остающиеся. Мы предоставляем дополнительный слой, который прозрачным образом замещает libc для приложений и дает более соответствующее стандартам поведение, превращая Android в нечто, значительно более следующее стандартам, чем он на самом деле является. Мы также уделяем внимание обратной совместимости и исправлениям, и такие исправления становятся доступными для всех версий Android. Это сильно облегчает портирование существующего кода (уже работающего на других POSIX платформах). Это первый шаг, необходимый для того, чтобы двигаться дальше - т.е. для реализации полного нативного API для всей системы, включая UI и другие вещи.

Мы также запустили регулярное регрессионное тестирование библиотек Boost под Android - и таким образом Boost становится полноценным "гражданином" на Android. Нет нужды объяснять, что такое Boost; современная разработка на C++ практически невозможна без Boost - будь то прямое использование его библиотек или использование техник, продемострированных в Boost. Даже ISO C++ стандарт в значительной степени основывается на Boost.

Тем не менее, вплоть до последнего времени Boost не поддерживался на Android. Во-первых, многие библиотеки просто не работали из-за многочисленных проблем с Android, таких как ошибки или даже отсутствие некоторой функциональности в libc. Во-вторых, не проводилось регулярного регрессионного тестирования и не имело смысла его запускать до тех пор, пока основные проблемы не будут починены. Теперь с помощью CrystaX NDK мы сделали Android значительно более соответствующим стандартам (ISO C, ISO C++, POSIX и т.д.) так что Boost (как и многие другие проекты) теперь работает на Android без переписывания. Мы будем продолжать поддерживать Boost на Android, исправляя NDK в случае необходимости, или исправляя Boost - так что Boost становится полноценно поддерживаемым и на Android.

Мы хотим двигаться дальше и добавлять новые возможности в CrystaX NDK, т.к. у нас теперь есть хороший стабильный базис для дальнейшей разработки и добавление новых фич будет более легким. В идеале мы хотим сделать полноценный набор инструментов для нативной разработки под Android, позволяя разработчикам создавать любые приложения под Android (UI, services, broadcast receivers и т.д.), не требуя при этом использования Java.

Мы также хотим предоставить людям возможность легкого портирования приложений с iOS на Android, предоставляя Objective-C компилятор и Cocoa-совместимые фреймворки. В идеале разработчики смогут просто собирать существующие iOS приложения под Android с помощью CrystaX NDK без изменения исходников самого приложения.

Это длинный путь, но мы знаем как это сделать и четко видим как этого достичь. Для этого мы просим помощи у сообщества разработчиков, заинтересованных в дальнейшем развитии средств нативной разработки под Android.

Новые возможности

Ниже приведен список некоторых новых возможностей, которые мы хотим добавить в CrystaX NDK.

  • Репозиторий собранных библиотек и заголовочных файлов для разработки. Что-то типа 'apt-get' в Debian или 'brew' в OS X. У нас уже есть клиентское приложение для этого, которое мы назвали "crew". Для любой более-менее серьезной разработки под Android разработчики нуждаются в использовании хорошо оттестированных и зарекомендовавших себя сторонних библиотек - openssl, libraw, freetype, ffmpeg/libav, expat/libxml2, libjpeg, libpng и т.д. На данный момент каждый разработчик вынужден собирать такие библиотеки в каждом проекте, самостоятельно сражаясь со всеми их особенностями и ошибками. Мы хотим максимально упростить это - т.е. разработчики смогут просто набрать "crew install libpng" или "crew install ffmpeg" и получить готовые к использованию бинарники и заголовочные файлы прямо в файловом дереве NDK через несколько секунд.
  • Предоставить поддержку Objective-C v2. На данный момент CrystaX NDK поддерживает язык Objective-C. Однако существует ряд ограничений, препятствующих его реальному использованию. Во-первых, мы поддерживаем только Objective-C v1 runtime. Поддержки Objective-C v2 runtime пока нет. Во-вторых, у нас нет готовых к использованию Cocoa-совместимых фреймворков. Как только мы реализуем эти возможности, разработчики смогут портировать Objective-C код с iOS на Android со значительно меньшими усилиями.
  • Поддержать больше языков программирования. Сейчас мы поддерживаем C, C++ и ограниченно Objective-C. Однако существует огромное количество других языков программирования и мы хотим добавить поддержку многих из них в CrystaX NDK. Подумайте о D, Go, Fortran, Lisp, Erlang - разве это не классно? И хорошая новость заключается в том, что это уже намного легче сделать чем раньше в силу основной фичи CrystaX NDK - гораздо более полного соответствия стандартам.
  • Нативный API. На данный момент единственный полный API для Android - это Java API. Разработчики вынуждены писать обертки JNI для использования Android API в других языках программирования, или же использовать библиотеки типа Qt, предоставляющей унифицированный API для всех платформ, но, к сожалению, все еще не предоставляющей полного набора Android API. Мы хотим исправить эту ситуацию, предоставив нативный (C и C++) API для всей функциональности Android, позволяя использовать Android API из любого языка программирования максимально удобным образом.

У нас есть и другие мысли о том, что можно было бы добавить в CrystaX NDK для дальнейшего улучшения ситуации, но перечисленные выше - самые интересные, на наш взгляд. Мы также открыты для обсуждений и готовы выслушать новые идеи (и даже реализовать их, если большое количество народа выскажется "за"). Используйте наш трекер или связывайтесь с нами напрямую.

Сбор средств

Как я говорил выше, у нас есть планы по дальнейшему развитию CrystaX NDK. Мы хотим превратить его в полноценный набор инструментов для разработки под Android, не ограничивая разработчиков и предоставляя хороший базис для любого POSIX-совместимого программного обеспечения, давая тем самым возможность портировать его под Android без переписывания. Для этого мы просим помощи у сообщества разработчиков.

Мы запустили кампанию по сбору средств на сайте BountySource для продолжения разработки CrystaX NDK как открытого, доступного всем разработчикам проекта. Мы просим всех, заинтересованных в дальнейшем развитии средств нативной разработки под Android, помочь нам. Мы будем очень признательны за любую помощь - будь это финансирование нашего проекта, помощь в разработке или дальнейшее распространение информации о проекте.

Back
Home
Map
Back
Home
Map

Наши авторы: