Native Development Kit for Android
We offer CrystaX NDK - a widely used, open-source product that has been used by numerous commercial and open-source projects for years. Why not use Google's Android NDK? Because CrystaX NDK is better than Google's while remaining compatible. Basically, CrystaX NDK is a drop-in replacement for Google's NDK, allowing developers to use it in the same manner as Google's NDK but offering many added features and improvements.
Following are the main goals of CrystaX NDK:
- Better standard compatibility
- Easy porting of existing code to Android
- New features for Android native development
Look interesting? See in more detail what CrystaX NDK offers to Android developers!
New CrystaX NDK 10.3.2 is ready for download. This is patch release, where we've fixed critical issue in getauxval() implementation. Here are corresponding tickets.
As you may know, GCC 6 is coming. There are many new features, including experimental support of the new C++17 features (Concepts, std::invoke, std::shared_mutex, etc) and many new warnings, helping developers to write safe and reliable code. In fact, GCC 6, with all enabled warnings, makes some static code analyzers just irrelevant anymore.
It is meaningless to describe all GCC 6 features here, so I won't. Those who are interested in that can read about them on other sites, spreading information about the upcoming GCC 6 release (for example, here or here). However, I'd like to tell you about GCC 6 for Android development and, in particular, about the future of the GCC in CrystaX NDK.
New CrystaX NDK 10.3.1 is ready for download. This is patch release, where we've fixed several critical issues. Here is full list of the fixed issues.
Earlier, we've described how to use CrystaX NDK in Android Studio. Since that time Google announced new (experimental) gradle plug-in supporting NDK in Android Studio. Let's see how to use CrystaX NDK with this new plug-in.
To be consistent, we'll remaster previous article with new conditions - i.e. this will be again simple UI application, where Boost.Serialization would be used. Using Boost is not necessary for understanding new scheme of work with gradle experimental plug-in; however, we've included Boost examples just to cover more use cases.
We're glad to announce the release of CrystaX NDK 10.3.0!
The biggest changes in this release are:
- New GCC and LLVM/clang toolchains
- Big improvements of Objective-C v2 support
- Initial support of Python (2.7 and 3.5) for Android.
Besides that, we've fixed many bugs and made huge number of improvements. See below for details.
We're glad to announce the release of CrystaX NDK 10.2.0!
We're moving further as promised, and in this release, we've fixed many bugs and implemented many improvements. See the list below for the main features introduced in CrystaX NDK 10.2.0.
We've started a fundraising campaign on BountySource to continue the development of CrystaX NDK and keep it available free to all Android developers.
We're asking everyone interested in the further evolution of native development for Android to help us. We would very much appreciate any kind of help - whether it is funding, contributions to the project by sending us patches, or helping to spread the news all over the world.
In the previous article, we described how to build a simple Android executable, which uses Boost C++ libraries. This is good example to see how the process works and to understand the internals; however, for practical purposes we need to know how to build ready-to-use Android applications which can be submitted to Google Play Store, for example.
Do you have code that uses Boost C++ libraries? Do you want to easily port this code to Android? Or maybe you just want start a new Android-targeted project and would like to use Boost from the beginning? With CrystaX NDK 10.1.0, you get both an Android native development kit and Boost C++ libraries out of the box!
By definition, good applications must look good for users. Besides many other things, that means good applications must talk with users in their language. But just translation of words and phrases to another language is not enough - many other elements differs from one culture to another, including the format of dates, money values, rules for capitalization, etc. All such specific information in computing defined through locales.
The way locale-specific input and output should be handled is standardized by ISO C and ISO C++ standards, so usually it's enough to just follow standards to properly localize your application. Unfortunately, this approach doesn't work on Android for software written in C/C++. Android libc (Bionic) has no native support for locales, so the only way to use localized input/output in native code is to implement localization in Java and refer to it through JNI. Obviously, such an approach adds significant run-time overhead, but it's the only choice if you're using Google's Android NDK.