本篇文章將介紹如何使用 CMake 構建實現你的第一個 NDK 項目。 ##前言 你好!歡迎來到我的的學習筆記分享系列,第一次給大家分享的是 Android NDK 開發的學習筆記,讓我們先開始了解 NDK 的構建方式吧! NDK 構建方式有兩種,一種是 ndk-build,另一種是 CMake,從 Android Studio 2.2 開始,Android Sudio 默認地使用 CMake 作為 NDK 項目的構建工具,本文將先介紹如何使用 CMake 來構建你的第一個 NDK 項目。
關于NDK
什么是NDK
NDK 全稱是 Native Development Kit,是一組可以讓你在 Android 應用中編寫實現 C/C++ 的工具,可以在項目用自己寫源代碼構建,也可以利用現有的預構建庫。
為什么要使用NDK
NDK 對許多類型的 Android 應用沒什么價值。 因為它不可避免地會增加開發過程的復雜性,但在一些情況下卻可能很有用或者是必須的,下面列舉一些 NDK 的使用目的:
- 從設備獲取更好的性能以用于計算密集型應用,例如游戲或物理模擬
- 重復使用自己或其他開發者的 C/C++ 庫,便利于跨平臺。
- NDK 集成了譬如 OpenSL、Vulkan 等 API 規范的特定實現,以實現在 java 層無法做到的功能如提升音頻性能等
- 增加反編譯難度
NDK 下載
可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載最新的 NDK 包
- 下載過往版本的 NDK 包
- 查看 NDK 修訂歷史記錄
關于 CMake
什么是 CMake
CMake 是一個開源的跨平臺工具系列,旨在構建,測試和打包軟件。CMake用于使用簡單的平臺和獨立于編譯器的配置文件來控制軟件編譯過程,并生成可在選擇的編譯器環境中使用的本機makefile和工作空間。簡單點說,CMake 是一款外部構建工具,從 Android Studio 2.2 開始,Android Sudio 默認地使用 CMake 與 Gradle 搭配使用來構建原生庫。
CMake 下載
和在 Android Studio 中下載 NDK 一樣,可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載 CMake:
- 進一步了解 CMake
使用 CMake 構建 NDK 項目
創建 NDK 項目
了解一些基礎概念之后,接下來是創建一個 Demo,一步步地來看一下使用 CMake 構建的 NDK 項目里面有什么: 首先是在 Android Studio(2.2以上) 中創建一個新的項目,勾選上 Include C++ support,本文介紹將使用 Kotlin。
點開 app 層級下的 build.gradle 文件,會發現多出如下部分:
- CMake 參數詳細信息
CMakeList.txt
讓我們來一步步分析默認生成的 CMakeList.txt 里包含了哪些信息——
- cmake_minimum_required() 首先開頭部分
cmake_minimum_required()
定義了所需 CMake的最低版本。
cmake_minimum_required(VERSION 3.4.1)
復制代碼
- add_library()
add_library()
命令用來添加庫,native-lib 對應著生成的庫的名字,SHARED 代表為分享庫,src/main/cpp/native-lib.cpp 則是指明了源文件的路徑。
add_library( # Sets the name of the library.native-lib# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).src/main/cpp/native-lib.cpp)
復制代碼
- find_library() 將?
find_library()
命令添加到 CMake 構建腳本中以定位 NDK 庫,并將其路徑存儲為一個變量。可以使用此變量在構建腳本的其他部分引用 NDK 庫,下面的代碼則是定位?Android 特定的日志支持庫并將其路徑存儲在?log-lib
?中
find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)
復制代碼
注:預構建的 NDK 庫已經存在于 Android 平臺上,因此,無需再構建或將其打包到 APK 中。由于 NDK 庫已經是 CMake 搜索路徑的一部分,甚至不需要在 NDK 安裝中指定庫的位置,只需要向 CMake 提供你希望使用的庫的名稱,并將其關聯到自己的原生庫中。
- target_link_libraries() 要將預構建庫關聯到自己的原生庫,則將其添加到以下的
target_link_libraries()
命令中:
target_link_libraries( # Specifies the target library.native-lib# Links the target library to the log library# included in the NDK.${log-lib})
復制代碼
當然,你也可以查看:
- Android NDK 原生 API
- CMake 命令詳細信息文檔
編譯
編譯生成的apk里,就會找對應名稱.so庫文件啦:
- 項目的源碼已上傳到Github
本文為個人原創,轉載請注明出處。