Greetings to all readers!
I
hasten to announce the release of
CrystaX NDK 10.1 - a set of tools for developing C / C ++ (and Objective-C) for Android.
CrystaX NDK is designed as a transparent replacement for Google's Android NDK, but it also adds a lot of goodies that are missing from the original NDK. First of all, this means that CrystaX NDK can be used instead of Google NDK, and everything will continue to work as before. But at the same time many things that are missing in the Google NDK will become available.
')
In this release, we have done a lot of work to ensure greater compatibility with ISO C, ISO C ++ and IEEE Std 1003.1 (POSIX) standards, making porting existing code to Android much easier. As you, perhaps, know, Android libc (Bionic) is far from being able to meet the specified standards. Many parts are simply not implemented, others are implemented with errors that force you to spend hours in debugging, especially since you don’t expect libc from this (I still remember how I had to debug two days before it turned out that strtod () doesn’t parse "0xXXXX" lines). Of course, the situation improves over time, and in new versions of Android, libc is slowly being corrected and supplemented, but a) the pace of fixes and additions is absolutely unsatisfactory and b) what should developers do, the programs of which should work not only on the latest but also on previous versions of Android?
In CrystaX NDK, we solved these problems by introducing the additional library libcrystax, in which we implemented the missing and incorrectly implemented functionality from Bionic. It also solves the problem of running programs on earlier versions of Android, because libcrystax.so is packaged with the application and is independent of the Android version. The introduction of the additional library itself is also done in the most transparent way - i.e. nothing the developer does not need to specify, everything will be collected automatically. In other words, a typical development process using NDK remains unchanged, which allows using CrystaX NDK as a transparent replacement for Google’s Android NDK.
So, here I briefly list the main features of CrystaX NDK:
- Full support for wide characters (wchar_t), including the ability to convert from multibyte encodings (such as UTF-8) to wide characters and vice versa. It helps a lot when porting existing code (for example, from the Windows world) to Android.
- Full support for native localization - i.e. printf (), strftime (), strfmon () and others work according to the locale set by setlocale () . This means the ability to localize applications without referring to the JNI. The well-known ICU library is also available, which means full Unicode support for those who need it.
- Full support for mathematical functions in accordance with the IEEE Std 1003.1, 2013 Edition standard, including functions for working with complex values and type-independent (type-generic) functions .
- Full support for standard C ++ library. Despite the stated support for C ++ in Google’s Android NDK, it remains purely nominal, since most of the standard C ++ library does not work. In particular, std :: mutex, std :: chrono, std :: stol, std :: stoul, and many others are not supported. In the case of using CrystaX NDK, you get full support for C ++ - both the language and its standard library.
- Boost libraries out of the box. We provide Boost 1.57.0 compiled libraries as part of the CrystaX NDK, so now using Boost for Android programming becomes very simple . In addition, the CrystaX NDK Boost works much better than the same Boost compiled using Google’s Android NDK, simply because in our case it works on a much more standards-compliant level than the usual Android libc (yes, I'm talking about libcrystax, heart of crystax ndk).
- Support for programming languages Objective-C and Objective-C ++ is included in both gcc and clang. Currently, support is limited to the core of these languages; Work is underway on Objective-C v2 runtime and Cocoa-like libraries. However, for many projects this is enough, therefore this feature is available in the CrystaX NDK.
A more complete description can be found on
the release page .
On this, perhaps, stop. If you have questions, I will gladly answer in the comments.