CrystaX NDK

Android NDK 替代方案
授权协议 GPL
开发语言 C/C++
所属分类 手机/移动开发、 手机开发工具
软件类型 开源软件
地区 不详
投 递 者 姬实
操作系统 Android
开源组织
适用人群 未知
 软件概览

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系统.


    例子

  2. 完整支持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等等.


    例子

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

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

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

  4. 最新工具链

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

  5. C++11/C++14支持

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

  6. 完整的C++标准库

    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++.


    例子

  7. 内置Boost C++库

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

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

  8. 支持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.

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

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

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

  10. 未完待续...

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

授权

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.


  • 地址: http://www.crystax.net/?locale=en 这个CrystaX NDK的作者是俄罗斯人,牛逼!俄罗斯,一个黑客云集的地方。 这个是NDK r7的新特性介绍: Description Here is customized distribution of Android NDK r7 which I have rebuilt from official sources.

  • https://www.crystax.net/en/android/ndk/6?id=6   Here is customized distribution of Android NDK r6 which I have rebuilt from official sources. Starting from NDK r5, Google added support of C++ exceptio

  • 简介 在linuxt系统下使用OpenCV2.3 + NDK R6编译 OpenCV人脸检测应用 准备 注:http://code.google.com/p/android-opencv/网站上说要使用crystax ndk r4代替NDK。估计可能是对于较旧的Android版本需要这样。如果NDK无法编译,请尝试使用crystax ndk r4编译。 OpenCV设置 从网站上下载OpenCV

  • 如何把jni中的的crash堆栈解析为cpp源代码位置,目前版本(r7/r7b)NDK提供了如下命令 ndk-stack.exe  -sym <path> [-dump <path>] 其 中"sym"对应的path是编译出来的二进制symbol的文件夹路径,通常是$PROJECT_PATH/obj/local /<abi>,“dump”对应的是crash log的路径。crash log来自lo

  • 配置: 用的版本是AS1.5(也可以尝试更高版本), Gradle地址是distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip NDK用的是CrystaX NDK 有参考:https://github.com/TsinStudio/AndroidDev/blob/master/Android%20N

  • 我正在尝试用 Android NDK独立编译器工具链构建一些东西,但是我收到了这个错误: Updating bundled third-party dependencies... bash -c 'mkdir -p output/{debug,release,test}/{FCollada/{FCDocument,FMath,FUtils,FColladaTest/{FCTestAssetMana

  • 是这样的,我用NDK编译C代码想在ANDROID手机上运行。但是在调用一些动态库的时候出现了一些问题,让我很头痛…… 一个多星期了,也找不到是什么原因。有个简单的例子。 main.cc 文件: //#include //#include //#include #include #include #include "add.h" int main(int argc, char* argv[]) {

  • 本文的目的不是为了完整地把Python 3.2移植到Android,只是希望编译出能用在自己程序里的链接库。 完成boost 1.47的移植之后,下一个目标就是Python 3.2。目前Python只有2.6.2非官方地移植到了Android(见P4A),他们迟迟不开始移植3.x,主要原因是他们认为3.x没用-_-。看来这件事情只能自己做了。由于Python 3.x和之前的版本有着巨大的区别,其难

  • 1、工具介绍    Cygwin:在windows平台上运行的unix模拟环境    NDK:Native Development Kit,android平台的一部分.提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的

 相关资料
  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 问题内容: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibernate状态目前不支持联合查询,现在我看到的建立联合的唯一方法是使用视图表。 另一个选择是使用普通的jdbc,但是这样一来,我将失去所有示例/条件查询功能,以及hibernate对表/列执行的hibernate映射验证。 问题答案: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibern

  • 目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:

  • 问题内容: 我正在使用StAX创建一个很大的xml文档。到目前为止,我一直使用IndentingXMLStreamwriter类来获取格式正确的文档。几天前,我们使用旧的jdk版本(6.26)设置了一个jenkins服务器,在该版本上我遇到了构建错误。 我认为由于安装了jdk版本而找不到该软件包。由于不同的原因,这不能更改(顺便说一句,是否有人知道添加了此软件包(com.sun.xml.inter

  • 问题内容: 出于各种原因,在编写 Java应用程序时 ,调用会被皱眉,所以如何通知调用过程并非一切都按计划进行? 编辑: 1是任何非零退出代码的。 问题答案: 当“应用程序”实际上是较大的Java应用程序(服务器)的子应用程序(例如servlet,applet)时,对的使用会被拒绝:在这种情况下,它可能会停止JVM并因此停止所有其他子应用程序。在这种情况下,抛出适当的异常(最好由应用程序框架/服务

  • 问题内容: 我知道这个话题已经解决了上千次。但是我找不到解决办法。 我正在尝试计算列表(df2.list2)的列中出现列表(df1.list1的每一行)的频率。所有列表仅包含唯一值。List1包含约300.000行,list2包含30.000行。 我有一个有效的代码,但是它的运行速度非常慢(因为我使用的是迭代程序)。我也尝试过itertuples(),但它给了我一个错误(“要解压缩的值太多(预期2

  • 除了Hazelcast之外,任何有Vertx群集管理器实际经验的人都对我们的以下要求有什么建议? 对于我们的(实时传感器数据)系统,我们在多个JVM中有数百个垂直链接,但我们不需要或不希望eventbus跨多个物理服务器。 我们在多个服务器上运行Vertx,但如果我们不在所有服务器之间共享一个eventbus,那么我们的平台就不那么复杂了(我们更愿意明确说明在服务器之间传递消息)。 Hazelca

  • 我在一本书中发现了一个“用餐哲学家问题”的替代解决方案,用Java编写: 解决方案的文本是: 或者,我们可以给筷子贴上从e到N-1的标签。每个哲学家都试图先拿起编号较低的筷子。这基本上意味着每个哲学家都会先选择左边的筷子,再选择右边的筷子(假设你是这样给它贴标签的),除了最后一位哲学家会选择相反的方式。有了这个解决方案,哲学家不可能拿着大筷子而不拿着小筷子。这就阻止了循环的能力,因为循环意味着较高