介紹Android原生開發工具包r14
現在,可以下載最新版本 Android 原生開發工具包 (NDK)——Android NDK r14。也可以通過 Android Studio 在 SDK 管理器中下載此版本:
https://developer.android.google.cn/ndk/downloads/index.html
那麼 r14 有哪些新增功能?可以在此處檢視完整的變更日誌:
https://github.com/android-ndk/ndk/wiki/Changelog-r14
而其中最突出的功能包括如下:
將所有平臺標頭更新為統一的標頭(下文詳細介紹)
現在可在 Darwin 和 Linux 上對 Clang 進行連結時優化 (LTO)
現已更新 libc++。您現在可以將 thread_local 用於重要的解構函式統計(僅限 Clang)
RenderScript 迴歸!
統一標頭
我們徹底重構了在 NDK 中釋出平臺標標頭檔案的方式。現在,不再是每個目標 API 級別單獨設定一組標頭,而是共同使用一組統一的標頭。在這些標頭中,通過 #if __ANDROID_API__ >= __ANDROID_API_FOO__ 前處理器指令保證 API 可用於每個 Android 平臺。
之前的方法依靠的是定期捕獲的平臺標頭快照。這意味著,在過去,任何時候我們修復僅與某個標頭有關的錯誤時,除了偶爾的向後移植外,此修復僅在最新版本中可用。現在,錯誤修復可用於任何 NDK API 級別。
除了錯誤修復之外,這還意味著您可以訪問每個目標版本中最新的 Linux UAPI 標頭。對於移植現有 Linux 程式碼(尤其底層程式碼)的使用者而言,這最為重要。需要記住的重要的一點是:僅僅具有標頭,並不意味著您執行的裝置的核心版本足夠新,可支援所有系統呼叫。一如既往,系統呼叫可能返回 ENOSYS。
除了 Linux 標頭外,您還可以獲取 OpenGL 和 OpenSLES 等的最新標頭。當您的目標 API 級別版本較舊時,可以更輕鬆地、有條件地使用新 API。現在,儘管在 KitKat 釋出之前該庫不可用,但可以在 Ice Cream Sandwich 中訪問 GLES3 標頭。您仍然需要通過 dlopen/dlsym 使用所有 API 呼叫,但您至少可以訪問呼叫這些函式所需的所有常量和 #defines。
請注意,從 NDK r16 開始,我們將移除舊版標頭,因此,越早提交錯誤,過渡將會越順利。
注意
在第三方標頭中,不存在像 OpenGL 中那樣的 API #ifdef Guard。在這些情況下,如果您使用的 API 不適用於目標 API 級別,將出現連結時錯誤(未定義的引用)而非編譯時錯誤。
目前使用 GCC 的獨立工具鏈不支援開箱即用(未來也不支援)。要使用 GCC,請在編譯時傳遞 -D__ANDROID_API__=$API。
在您的構建中啟用統一標頭
為了實現舊版標頭向統一標頭的順利過渡,我們預設不啟用新標頭,不過它在 r15 中預設為啟用。您選擇如何使用統一標頭,取決於您的構建系統。
ndk-build
在 Application.mk 中:
您也可以像下面這樣從命令列設定此屬性:
如果您通過 Gradle 將 ndk-build 用於 externalNativeBuild,請在 build.gradle 中指定以下配置設定:
CMake
在配置您的版本時,設定 ANDROID_UNIFIED_HEADERS=ON。常用的設定方式是:使用 cmake -DANDROID_UNIFIED_HEADERS=ON $OTHER_ARGS 來呼叫 CMake。
如果您通過 Gradle 將 CMake 用於 externalNativeBuild,您可以使用:
獨立工具鏈
在建立獨立工具鏈時,傳遞 --unified-headers。請注意,此選專案前不適用於舊版指令碼 make-standalone-toolchain.sh,而僅適用於 make_standalone_toolchain.py。
閱讀全文(包括“實驗性 Gradle 外掛”和“自定義構建系統”)及檢視文內所有連結,請點選文末“閱讀原文”。
推薦閱讀:
檢測並消滅“巖羚羊”這種 Android 平臺上的殭屍網路欺詐
點選「閱讀原文」,閱讀全文並檢視文內連結
相關文章
- 推出Android原生開發工具包r16Android
- 爬蟲開發python工具包介紹 (2)爬蟲Python
- Android開發 MeasureSpec介紹Android
- Android開發之WebService介紹AndroidWeb
- Android API 開發包介紹AndroidAPI
- DriverStudio工具包介紹
- Kotlin on Android 開發環境介紹KotlinAndroid開發環境
- Android開發 - 掌握ConstraintLayout(二)介紹AndroidAI
- 手遊開發Android平臺周邊工具介紹Android
- Android UI開發第四十篇——ScrollTricks介紹AndroidUI
- ModStartCMS模組開發介紹
- Android開發環境中的概念和工具介紹Android開發環境
- 陀螺世界商城開發(介紹)
- SJL 開發包1.0介紹
- 介紹一個功能豐富的 Java 工具包Java
- 原生Android也能做Web開發了AndroidWeb
- 蘋果證實Apple Watch原生應用開發工具包下月釋出蘋果APP
- Web專案開發介紹及實戰專案介紹Web
- android AsyncTask介紹Android
- IBM Lotus Sametime V8.5 工具包介紹IBM
- 探索PyTorch:介紹及常用工具包展示PyTorch
- Web開發小工具介紹Web
- Java/JavaWeb/開發環境介紹JavaWeb開發環境
- 微信公眾介面開發介紹
- iOS開發- reloadData方法介紹iOS
- android原生開發recyclerview基礎例項AndroidView
- Flutter混合開發二-FlutterBoost使用介紹Flutter
- 介紹一個軟體開發工具
- VS Code外掛開發介紹(二)
- iOS混合開發庫(GICXMLLayout)一、介紹iOSXML
- SOLIDWORKS二次開發介紹Solid
- Three.js開發指南(1):介紹JS
- 小程式web開發框架-weweb介紹Web框架
- Xamarin開發Anroid應用介紹
- [推薦]WebService開發知識介紹Web
- PHP開發之運算子使用介紹PHP
- Harmony 應用開發常用元件介紹元件
- Android之Zygote介紹AndroidGo