- 授权协议: GPL
- 开发语言: C/C++
- 操作系统: Android
- 软件首页: https://www.crystax.net/android/ndk
- 官方下载: https://www.crystax.net/download
软件介绍
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开发更容易,详见以下关键特性.
宽字符是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系统.
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等等.
ISO C标准定义头文件<tgmath.h>和<complex.h>. 在Google's Android NDK中, <complex.h>始于r10, 仅支持Android 5.0 (android-21), 同时泛型数学函数库完全没有实现.
而CrystaX NDK, 没什么好说的,都完整实现了. 尽情使用!
CrystaX NDK包含最新版GCC和Clang编译器. 允许开发人员使用最新语言特性, 例如C++11/C++14. 所有编译器都经过不同程度的优化, 可以针对目标硬件平台生成高效执行代码.
由于CrystaX NDK包含最新版GCC和Clang编译器, 所以它支持所有C++11/C++14特性. C++11 Support in GCC, C++14 Support in GCC 和 C++ Support in Clang.
CrystaX NDK提供完整可用的C++11标准库, 包括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++.
提供了预编译好的Boost C++库文件. 轻松使用Boost,不用再自己折腾了.更重要的是, Boost C++库跟CrystaX NDK更配! 因为基于更加标准化支持的CrystaX NDK(是的, 这是libcrystax, CrystaX NDK的核心).
支持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.
众所周知Android libc (Bionic)的标准C函数实现有大量bug, 例如strtod, 只对最简单格式的字符串输入有效, 不支持其他标准C定义的规范. 有些缺陷已修复, 有些还未修复. 即使已修复, 也只对后续新版本有效. 开发人员只能自己实现针对已发布版本的适配. 这显著增加了Android原生应用的开发移植时间.
CrystaX NDK在libcrystax中重写了这些有缺陷的函数,而且平台版本无关,对开发人员透明. 开发人员无须关注libcrystax替代Bionic的技术细节, 同时您也无须关注一个缺陷修复是针对哪个Android版本的问题, 我们保证任何缺陷修复都是全部版本生效.
授权
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/<toolchain>/prebuilt/<system>.
预编译的LLVM/Clang工具链基于 LLVM "BSD" license.
基本上, 授权规则等同于Google's Android NDK - 例如, 允许商业&非商业用途. 唯一区别是CrystaX部分, 基于 BSD 2-clause license.
Introduction to Programming in Java
Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00
By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!
