CrystaX NDK - Android NDK 替代方案


GPL
Android
C/C++

软件简介

CrystaX NDK是Google’s Android NDK的一个替代方案. 相比谷歌的NDK, CrystaX NDK在支持相同功能的同时,
提供了一些很棒的新功能和大量的缺陷修复和改进.

CrystaX NDK的主要目的是让Android开发者更高效地运用标准化代码进行native开发. 通过使用那些支持多平台 (IOS, OS X,
Windows, Linux 等等) 的标准代码库,CrystaX
NDK显著节省了开发时间,不需要再为Android平台做特殊修改(甚至于为Android特殊定制实现那些在其他平台早已实现的功能).

由于Android libc(Bionic)功能有限,版本之间还不尽相同,开发者需要做很多运行时版本检测和兼容性适配的额外工作. CrystaX
NDK提供的libcrystax屏蔽了Android版本兼容性差异,甚至重写了很多libc函数,使得应用程序在所有Android设备上表现一致.

CrystaX NDK的另一个目的是为Android Native开发提供一些很棒的新功能.例如: Objective-C和其他编程语言的支持.

这个项目最初是2009年Dmitry Moskalchuk的个人项目,只是为了添加一些Google Android
NDK缺失的C特性(exceptions,RTTI,C标准库),后来越加越多, 不断优化, CrystaX NDK逐步变成了Android
native开发的最佳进化.很多开源和商业化项目使用CrystaX NDK进行Android开发和移植.

现在CrystaX NDK提供了大量新功能,使得Android native开发更容易,详见以下关键特性.

  1. 完整支持宽字符

宽字符是C和C标准库的一部分,例如C标准库的wcsnlen, wcsncasecmp, wcsncmp
其他,
C
标准库的wchar_t, std::base_string, std::basic_ostream,
std::basic_regex等等.Android libc (Bionic)对这些支持不足.

CrystaX NDK提供标准化的宽字符支持,包括multibyte-to-wide和反之亦然的转换. 你可以轻松移植已有代码, 或者撰写新代码,
尽情使用宽字符, 字符串, 流以及正则表达式, 不再受限于Android系统.

例子

  1. 完整支持C locales

Android libc (Bionic) 不支持locales, 所以在native代码中使用本地化输入输出的唯一方法是通过JNI调用Java本地化实现.
显然这种方法增加了显著的运行时开销, 但这是你使用谷歌Android NDK的唯一选择.

CrystaX NDK内置支持locales, 只需简单调用标准的setlocale, 所有后续C标准函数调用都使用设置的locale做输入输出.
CrystaX NDK还支持”locales扩展” (部分 IEEE Std 1003.1, 2013
Edition
),
提供很多标准C接口的locale有效的函数,例如printf_l, strftime_l, strfmon_l等等.

例子

  1. 完整数学支持, 包括复数和泛型函数库

ISO C标准定义头文件. 在Google’s Android NDK中, 始于r10,
仅支持Android 5.0 (android-21), 同时泛型数学函数库完全没有实现.

而CrystaX NDK, 没什么好说的,都完整实现了. 尽情使用!

  1. 最新工具链

CrystaX NDK包含最新版GCC和Clang编译器. 允许开发人员使用最新语言特性, 例如C11/C14. 所有编译器都经过不同程度的优化,
可以针对目标硬件平台生成高效执行代码.

  1. C11/C14支持

由于CrystaX NDK包含最新版GCC和Clang编译器, 所以它支持所有C11/C14特性. C++11 Support in
GCC
, C++14 Support in
GCC
C++ Support in
Clang
.

  1. 完整的C++标准库

CrystaX NDK提供完整可用的C11标准库, 包括std::thread 和 std::mutex, std::chrono的类和方法,
以及方法std::stol, std::stoul etc. 这些在Google’s Android
NDK中都缺失.或者严格地说,存在但仅限于实验版的LLMV libc
实现.

CrystaX NDK完整支持C标准库, 无论你使用GNU libstdc或LLVM libc++.

另外, LLVM libc 在CrystaX NDK中也是第一优先级, 地位等同于GNU libstdc,
所以你可以自由选择其中之一,默认使用GNU libstdc++.

例子

  1. 内置Boost C++库

提供了预编译好的Boost C库文件. 轻松使用Boost,不用再自己折腾了.更重要的是, Boost C库跟CrystaX NDK更配!
因为基于更加标准化支持的CrystaX NDK(是的, 这是libcrystax, CrystaX NDK的核心).

例子 如何在Android工程中使用Boost C++库.

  1. 支持Objective-C and Objective-C++

Google’s NDK只支持C C. CrystaX NDK还支持Objective-C和Objective-C.

从CrystaX NDK 10.2.0开始, 我们新增支持Objective-C v2 runtime 和初始版本的frameworks
(Foundation and CoreFoundation).

这里 是一个小例子,
介绍如何在Android平台使用Objective-C. 简单说明, 只需添加源码文件到Android.mk, LOCAL_SRC_FILES 添加.m
(Objective-C) 和.mm (Objective-C++), 添加”APP_OBJC := cocotron” 到 Application.mk.

  1. 标准C库的大量缺陷修复和功能改进

众所周知Android libc (Bionic)的标准C函数实现有大量bug, 例如strtod, 只对最简单格式的字符串输入有效,
不支持其他标准C定义的规范. 有些缺陷已修复, 有些还未修复. 即使已修复, 也只对后续新版本有效. 开发人员只能自己实现针对已发布版本的适配.
这显著增加了Android原生应用的开发移植时间.

CrystaX NDK在libcrystax中重写了这些有缺陷的函数,而且平台版本无关,对开发人员透明.
开发人员无须关注libcrystax替代Bionic的技术细节, 同时您也无须关注一个缺陷修复是针对哪个Android版本的问题,
我们保证任何缺陷修复都是全部版本生效.

  1. 未完待续…

如果你还需要其他特性,请联系我们.
欢迎反馈问题和缺陷, 当然,也非常欢迎贡献!

授权

CrystaX NDK包含若干open-source licenses. 详见每个模块的版权声明文件.

请注意CrystaX NDK发布包中也包括编译器,链接器,文档等的预编译二进制文件.
工具链的源码在GitHub
(你可以使用编译脚本自动下载它).

预编译的GCC和其他二进制文件(GDB, binutils 等等)基于the GNU General Public License (GPL) 或 the
GNU Lesser General Public License (LGPL). 详见COPYING and COPYING.LIB 位于
$NDK/toolchains//prebuilt/.

预编译的LLVM/Clang工具链基于 LLVM “BSD”
license
.

基本上, 授权规则等同于Google’s Android NDK - 例如, 允许商业&非商业用途. 唯一区别是CrystaX部分, 基于 BSD
2-clause license
.