Android NDK 替代方案:CrystaX NDK

7n5e 9年前發布 | 34K 次閱讀 Android開發 移動開發 CrystaX NDK

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.baiduhome.net/lib/view/home/1437792495740

 本文由用戶 7n5e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!