GCC 6 - теперь и для разработки под Android
Как известно, скоро выйдет GCC 6. В нем содержится множество улучшений, включая экспериментальную поддержку новых возможностей C++17 (концепты, std::invoke, std::shared_mutex и т.д.) и значительно более "умные" предупреждения, помогающие разработчикам писать безопасный и надежный код. Фактически GCC 6 со всеми включенными предупреждениями делает некоторые статические анализаторы кода неактуальными.
Бессмысленно описывать все новые возможности GCC 6 в этой статье, поэтому я не буду. Те, кому это интересно, могут прочитать об этом на других сайтах, распространяющих информацию о грядущем релизе GCC 6 (к примеру, здесь или здесь). Однако я хотел бы рассказать об использовании GCC 6 для разработки под Android и, в частности, о будущем GCC в составе CrystaX NDK.
Android Studio с экспериментальным Gradle плагином и CrystaX NDK
Ранее мы описали как использовать CrystaX NDK в Android Studio. С того времени Google анонсировал новый (экпериментальный) Gradle плагин с улучшенной поддержкой NDK в Android Studio. Давайте посмотрим, как использовать CrystaX NDK с этим новым плагином.
Будучи последовательными, мы обновим предыдущую статью, добавив в нее новые условия - т.е. это будет все то же простое UI приложение, использующее Boost.Serialization. Использование Boost необязательно для понимания новой схемы работы с экспериментальным Gradle плагином; тем не менее, мы включили пример работы с Boost для большей полноты примера.
Выпущен CrystaX NDK 10.3.0
Мы рады сообщить, что новый выпуск CrystaX NDK 10.3.0 готов к использованию!
Наиболее важные изменения в этом выпуске:
- Новые GCC и LLVM/clang.
- Сильно улучшена поддержка Objective-C v2.
- Добавлена поддержка Python (2.7 и 3.5) для Android.
Кроме этого, починено много ошибок и сделано огромное количество улучшений. Ниже вы можете ознакомиться с более подробной информацией.
Выпущен новый CrystaX NDK 10.2.0!
Мы рады сообщить, что новый выпуск CrystaX NDK 10.2.0 готов к использованию!
Мы работаем над проектом согласно обещаниям, и в этом выпуске мы исправили много ошибок и внесли большое количество улучшений. Ниже вы можете ознакомиться с основными фичами этой версии.
Запущена кампания по сбору средств
Меня зовут Дмитрий Москальчук и я автор 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 Studio для сборки приложений с NDK и Boost
В предыдущей статье мы рассмотрели как собирать простые исполняемые файлы под Android с использованием библиотек Boost. Это хороший пример для понимания того, как все работает "изнутри"; однако для практических целей хорошо было бы уметь собирать готовые к использованию приложения, которые можно залить в магазин приложений Google Play, к примеру.
Boost + Android? CrystaX NDK!
У вас есть код, который использует библиотеки Boost C++? Вы хотите максимально простым способом портировать этот код под Android? Или, может быть, вы просто начинаете новый проект под Android и хотите использовать Boost с самого начала? С CrystaX NDK 10.1.0 вы получаете возможность разрабатывать под Android на C++ с использованием Boost прямо "из коробки".
Давайте посмотрим, как это можно сделать.
Локализация под Android на C/C++? Да, с помощью CrystaX NDK!
По определению, хорошее приложение должно быть удобно для пользователя. А удобство использования, помимо всего прочего, означает, что приложение должно разговаривать с пользователем на его родном языке. Но простого перевода слов и предложений недостаточно, разные культуры отличаются друг от друга не только языками, но и, например, способами записи дат, обозначением денежных единиц, правилами преобразования прописных букв в строчные и т.д.. Вся эта информация в программировании собрана в так называемых локалях.
Способы работы с локализованными вводом и выводом описаны в международных стандартах языков программирования ISO C и ISO C++, поэтому обычно достаточно просто следовать стандарту, чтобы должным образом локализовать ваше приложение. К сожалению, этот простой метод не работает на Android для приложений, написанных на C/C++. Библиотека libc на Android (Bionic) не поддерживает локали, поэтому единственный способ использовать локализованный ввод/вывод в коде на C/C++ -- это реализовать локализацию на языке Java и потом использовать ее в коде на C/C++ через JNI. Очевидно, подобный подход вносит существенные накладные расходы во время исполнения программы, но это единственный вариант, если вы используете Google NDK.