Реліз CrystaX NDK 10.1

Вітаю всіх читачів!

Поспішаю повідомити про випуск CrystaX NDK 10.1 — набору інструментів для розробки на C/C++ (і Objective-C) під Android.

CrystaX NDK розроблений як прозора заміна для Android NDK від Google, але при цьому додає чимало смакоти, відсутніх в оригінальному NDK. Насамперед, це означає, що CrystaX NDK можна використовувати замість Google NDK, і все буде продовжувати працювати як раніше. Але при цьому стануть доступними багато речей, які відсутні в Google NDK.

У цьому релізі ми виконали чималу роботу по забезпеченню більшої сумісності зі стандартами ISO C, ISO C++ і IEEE Std 1003.1 (POSIX), завдяки чому портування існуючого коду на Android стає набагато легше. Як ви, можливо, знаєте, Android libc (Bionic) далека від того, щоб відповідати зазначеним стандартам. Багато просто не реалізовані, інші — реалізовано з помилками, змушують провести в налагодженні довгі години, тим більше що вже від libc цього не чекаєш (досі пам'ятаю, як довелося отлаживатся два дні, перш ніж з'ясувалося, що strtod() не вміє парсити «0xXXXX» рядка). Звичайно, з часом ситуація поліпшується, і в нових версіях Android libc потихеньку виправляється і доповнюється, але а) темпи виправлень і доповнень абсолютно незадовільні і б) що робити розробникам, програми яких мають працювати не тільки на останніх, але і на попередніх версіях Android?



У CrystaX NDK ми вирішили ці проблеми шляхом введення додаткової бібліотеки libcrystax, в якій ми реалізували відсутній і неправильно реалізований функціонал з Bionic. Це також вирішує проблему запуску програм на більш ранніх версіях Android, т. к. libcrystax.so пакується разом з додатком і не залежить від версії Android. Саме введення додаткової бібліотеки теж зроблено максимально прозорим способом — тобто нічого додатково розробнику вказувати не треба, все збереться автоматично. Іншими словами, типовий процес розробки з використанням NDK залишається без змін, що і дозволяє використовувати CrystaX NDK як прозору заміну для Android NDK від Google.

Отже, тут я коротко перерахую основні фічі CrystaX NDK:
  • Повна підтримка широких символів (wchar_t), включаючи можливість конвертування з мультибайтных кодувань (UTF-8) у широкосимвольные і навпаки. Дуже допомагає при портуванні існуючого коду (наприклад, з Windows світу) під Android.
  • Повна підтримка нативної локалізації — тобто printf(), strftime(), strfmon() та інші працюють з урахуванням локалі, виставленої з допомогою setlocale(). Це означає можливість локалізації додатків без звернення до JNI. Також доступна широко відома бібліотека ICU, що означає повну підтримку Unicode для тих, кому це потрібно.
  • Повна підтримка математичних функцій у відповідності зі стандартом IEEE Std 1003.1, 2013 Edition, зокрема функції для роботи з комплексними значеннями і типо-незалежні (type-generic) функції.
  • Повна підтримка стандартної бібліотеки C++. Незважаючи на заявлену підтримку C++ в Android NDK від Google, вона залишається суто номінальною, оскільки більша частина із стандартної бібліотеки C++ не працює. Зокрема, не підтримуються std::mutex, std::chrono, std::stol, std::stoul і багато інших. У випадку ж використання CrystaX NDK ви отримуєте повноцінну підтримку C++ — як мови, так і його стандартної бібліотеки.
  • Бібліотеки Boost «з коробки». Ми надаємо зібрані бібліотеки Boost 1.57.0 у складі CrystaX NDK, так що тепер використання Boost для програмування під Android стає дуже простим. Крім того, Boost в CrystaX NDK працює набагато краще того ж Boost, зібраного з допомогою Android NDK від Google, просто тому, що в нашому випадку він працює поверх значно більше відповідного стандартам рівня, ніж звичайна Android libc (так, я говорю про libcrystax, серце CrystaX NDK).
  • Включена підтримка мов програмування Objective-C, Objective-C++ — і в gcc, і в clang. На даний момент підтримка обмежена ядром цих мов; ведеться робота над Objective-C v2 runtime і Cocoa-like бібліотеками. Однак, для багатьох проектів і цього достатньо, тому дана можливість доступна в CrystaX NDK.


З більш повним описом можна ознайомитися на сторінці релізу.

На цьому, мабуть, зупинюся. Якщо є питання, з радістю відповім в коментарях.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.