CMake 构建项目Android NDK项目基础知识
本篇文章將介紹如何使用 CMake 構(gòu)建實現(xiàn)你的第一個 NDK 項目。 ##前言 你好!歡迎來到我的的學習筆記分享系列,第一次給大家分享的是 Android NDK 開發(fā)的學習筆記,讓我們先開始了解 NDK 的構(gòu)建方式吧! NDK 構(gòu)建方式有兩種,一種是 ndk-build,另一種是 CMake,從 Android Studio 2.2 開始,Android Sudio 默認地使用 CMake 作為 NDK 項目的構(gòu)建工具,本文將先介紹如何使用 CMake 來構(gòu)建你的第一個 NDK 項目。
關(guān)于NDK
什么是NDK
NDK 全稱是 Native Development Kit,是一組可以讓你在 Android 應(yīng)用中編寫實現(xiàn) C/C++ 的工具,可以在項目用自己寫源代碼構(gòu)建,也可以利用現(xiàn)有的預(yù)構(gòu)建庫。
為什么要使用NDK
NDK 對許多類型的 Android 應(yīng)用沒什么價值。 因為它不可避免地會增加開發(fā)過程的復(fù)雜性,但在一些情況下卻可能很有用或者是必須的,下面列舉一些 NDK 的使用目的:
- 從設(shè)備獲取更好的性能以用于計算密集型應(yīng)用,例如游戲或物理模擬
- 重復(fù)使用自己或其他開發(fā)者的 C/C++ 庫,便利于跨平臺。
- NDK 集成了譬如 OpenSL、Vulkan 等 API 規(guī)范的特定實現(xiàn),以實現(xiàn)在 java 層無法做到的功能如提升音頻性能等
- 增加反編譯難度
NDK 下載
可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載最新的 NDK 包
下載后所在目錄是 $(你的sdk目錄)/ndk-bundle,里面有很多重要的工具如 ndk-build、ndk-gdb 等,之后會再做介紹。當然,你也可以:- 下載過往版本的 NDK 包
- 查看 NDK 修訂歷史記錄
關(guān)于 CMake
什么是 CMake
CMake 是一個開源的跨平臺工具系列,旨在構(gòu)建,測試和打包軟件。CMake用于使用簡單的平臺和獨立于編譯器的配置文件來控制軟件編譯過程,并生成可在選擇的編譯器環(huán)境中使用的本機makefile和工作空間。簡單點說,CMake 是一款外部構(gòu)建工具,從 Android Studio 2.2 開始,Android Sudio 默認地使用 CMake 與 Gradle 搭配使用來構(gòu)建原生庫。
CMake 下載
和在 Android Studio 中下載 NDK 一樣,可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載 CMake:
當然,你也可以:- 進一步了解 CMake
使用 CMake 構(gòu)建 NDK 項目
創(chuàng)建 NDK 項目
了解一些基礎(chǔ)概念之后,接下來是創(chuàng)建一個 Demo,一步步地來看一下使用 CMake 構(gòu)建的 NDK 項目里面有什么: 首先是在 Android Studio(2.2以上) 中創(chuàng)建一個新的項目,勾選上 Include C++ support,本文介紹將使用 Kotlin。
然后一直往下,在自定義 C++ Support 界面保持 Toolchain Default 即可 項目創(chuàng)建了之后,你會在 Project 目錄視圖下,發(fā)現(xiàn)比普通的創(chuàng)建新項目多了幾個文件:cpp目錄里是默認生成的 cpp 文件,CMakeLists.txt 為 CMake 構(gòu)建腳本。點開 app 層級下的 build.gradle 文件,會發(fā)現(xiàn)多出如下部分:
這就是前文提到的在 Gradle 使用 CMake 配置為外部構(gòu)建,.externalNativeBuild 文件因此生成,其中 path 指定了構(gòu)建腳本的路徑。還可以補充其他參數(shù)信息,可查閱:- CMake 參數(shù)詳細信息
CMakeList.txt
讓我們來一步步分析默認生成的 CMakeList.txt 里包含了哪些信息——
- cmake_minimum_required() 首先開頭部分 cmake_minimum_required() 定義了所需 CMake的最低版本。
- add_library() add_library() 命令用來添加庫,native-lib 對應(yīng)著生成的庫的名字,SHARED 代表為分享庫,src/main/cpp/native-lib.cpp 則是指明了源文件的路徑。
- find_library() 將?find_library()命令添加到 CMake 構(gòu)建腳本中以定位 NDK 庫,并將其路徑存儲為一個變量。可以使用此變量在構(gòu)建腳本的其他部分引用 NDK 庫,下面的代碼則是定位?Android 特定的日志支持庫并將其路徑存儲在?log-lib?中
注:預(yù)構(gòu)建的 NDK 庫已經(jīng)存在于 Android 平臺上,因此,無需再構(gòu)建或?qū)⑵浯虬?APK 中。由于 NDK 庫已經(jīng)是 CMake 搜索路徑的一部分,甚至不需要在 NDK 安裝中指定庫的位置,只需要向 CMake 提供你希望使用的庫的名稱,并將其關(guān)聯(lián)到自己的原生庫中。
- target_link_libraries() 要將預(yù)構(gòu)建庫關(guān)聯(lián)到自己的原生庫,則將其添加到以下的 target_link_libraries() 命令中:
當然,你也可以查看:
- Android NDK 原生 API
- CMake 命令詳細信息文檔
編譯
編譯生成的apk里,就會找對應(yīng)名稱.so庫文件啦:
- 項目的源碼已上傳到Github
本文為個人原創(chuàng),轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的CMake 构建项目Android NDK项目基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery-weui
- 下一篇: 深入react技术栈(3):React组