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.
In this release, we provide the most recent toolchains based on gcc-5.3 and llvm-3.7. Old gcc-4.9 and llvm-3.6 toolchains are also kept for compatibility but will be removed in the next release.
$ $NDK/toolchains/arm-linux-androideabi-5/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --version arm-linux-androideabi-gcc (GCC) 5.3 20151204 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ $NDK/toolchains/llvm-3.7/prebuilt/linux-x86_64/bin/clang -target armv7-none-linux-androideabi --version clang version 3.7 Target: armv7-none-linux-android Thread model: posix
We've improved Objective-C v2 runtime a lot, and this allowed us to enable all modern Objective-C v2 features, such as Automatic Reference Counting, Objective-C Literals syntax, etc. Also in this release, in addition to Foundation and CoreFoundation, we've added CoreData, CoreText, CoreGraphics and CoreVideo frameworks.
We've created a sample project for your convenience, showing how to develop in Objective-C v2 for both iOS and Android.
WARNING! All these Objective-C v2 features are only supported if the LLVM/clang toolchain is used. If you're using ndk-build, the simplest way to specify it would be by adding the following into your Application.mk:
# Application.mk NDK_TOOLCHAIN_VERSION := clang # Or this one, if you want to be explicit regarding version: #NDK_TOOLCHAIN_VERSION := clang3.7
We now provide prebuilt python-2.7 and python-3.5 binaries (executables, libraries and headers) for all supported Android ABIs. As in all other prebuilt libraries in CrystaX NDK, Python binaries were built from upstream packages without any changes in their sources. This is the direct result of our approach: when something doesn't build, we don't fix that software. Instead, we fix CrystaX NDK to make its behavior conform to standards (POSIX and de facto standards like GNU/Linux behavior).
Python support is still in an experimental state, even though it works well enough, as far as we can see. However, it has not been as thoroughly tested as other components, so there could be some bugs and missing parts. If you find an issue, don't hesitate to report it to us!
We'd like to say thank you to Vitaly Murashev - Python is supported in CrystaX NDK mainly due to his help. This is how open source works: doing something just for fun and sharing the results with others. Thank you, Vitaly!
Prebuilt Python binaries reside in $NDK/sources/python/2.7 and $NDK/sources/python/3.5 folders. In case you're using ndk-build, here is an example of how to use Python libraries in your project:
# Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mymodule LOCAL_SRC_FILES := ... LOCAL_SHARED_LIBRARIES := python_shared include $(BUILD_SHARED_LIBRARY) # Replace 3.5 by 2.7 if needed $(call import-module,python/3.5)
We're further improving POSIX support in CrystaX NDK. In this release, we've implemented more POSIX interfaces in libcrystax.so (the core of CrystaX NDK), which depend less than before on Google's libc. In fact, the only big POSIX part taken from Google's libc now is POSIX threads; this is what we plan to address in the next release, completely replacing Google's libc with libcrystax.so.
As part of our POSIX-support improvement efforts, we've integrated Open POSIX Test Suite into the CrystaX NDK automatic testing process, ensuring that libcrystax.so provides a standards-conforming implementation.
We've included prebuilt Boost 1.59.0 libraries, which are built with both GNU libstdc++ and LLVM libc++ C++ Standard Library implementations. Previously, our prebuilt Boost libraries were built with GNU libstdc++ only, forcing developers to use the gnustl implementation in their projects. Now you're free to use either one: ndk-build automatically detects the preferred library and uses the proper version of prebuilt Boost libraries.
Also, because we now have Python for Android now, we've started building and testing Boost.Python. This work is not yet fully finished, but we're working on it and it will be improved with time.
CrystaX is the approved tester for the Boost project. This means we're running continuous regression testing for the Boost project and publishing the results on the Boost website (master, develop). This helps both the CrystaX NDK and Boost projects, making both of them better. Boost users have the ability to use well-tested Boost libraries on Android, and CrystaX NDK benefits from that, being proved that it provide really good conformance to POSIX and C++ standards.
And last but not least, there have been numerous bug fixes and small improvements, leading to better behavior of CrystaX NDK. Here is a full list of tickets we've closed in 10.3.0.
Download CrystaX NDK 10.3.0 here and enjoy!
Alternatively, if you're on OS X and use Homebrew, just type:
brew install crystax-ndk