GCC 6 - now for Android
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.
Android Studio with experimental Gradle plug-in and CrystaX NDK
Earlier, we described how to use CrystaX NDK in Android Studio. Since that time Google announced a 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 the previous article with new conditions - i.e., this will again be a simple UI application where Boost.Serialization would be used. Using Boost is not necessary for understanding the new work scheme with the Gradle experimental plug-in; however, we've included Boost examples just to cover more use cases.
CrystaX NDK 10.3.0 released!
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 a huge number of improvements. See below for details.
CrystaX NDK 10.2.0 released!
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 this version.
Fund raising campaign started
My name is Dmitry Moskalchuk and I’m the author of CrystaX NDK - Native Development Kit for Android.
I started this project in 2009, by adding full C++ support to the Google’s Android NDK (Google's first Android NDK versions did not support C++) - language core as well as the C++ standard library. The first CrystaX NDK release became popular very quickly because people really needed C++ to make their applications/libraries work on Android without having to rewrite them in Java. Google added the same level of C++ support two years after the first CrystaX NDK release. It became clear to me at the time that there were many other things in Android NDK that it would be good to fix or improve, so I reformulated the project from "Android NDK with C++ support" to an “Improved Android NDK” and continued to work on it.
I’ve now been working on the project for five years, adding more and more features to the NDK to improve native development for Android. Two years ago, Alexander Zhukov also joined this project, so now we’re working on it together. Since we started working on CrystaX NDK we have funded ourselves without any sponsorship. That has led us to make money in other ways (such as working as contractors and doing consulting jobs on other projects) and invest our earnings in the CrystaX NDK project. Because of this we have only been able to work on NDK part time, which means it is not as powerful as it could be. We switched to working full-time on CrystaX NDK over the last eight months and now we have achieved significant results, which you can read about on the NDK page.
Looking further, we plan to turn CrystaX NDK into a powerful comprehensive toolkit that allows developers to use their favourite programming languages, frameworks and libraries - i.e. making Android developer-friendly without splitting developers to first-class (Java) and others.
Using Android Studio to build applications with NDK and Boost C++ libraries
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.
Boost + Android? CrystaX NDK!
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!
Lets see how to do that.
Native localization in Android? Yes, with CrystaX NDK!
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.