日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

CMake 构建项目Android NDK项目基础知识

發(fā)布時間:2023/12/9 Android 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMake 构建项目Android NDK项目基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇文章將介紹如何使用 CMake 構(gòu)建實現(xiàn)你的第一個 NDK 項目。 ##前言 你好!歡迎來到我的的學(xué)習(xí)筆記分享系列,第一次給大家分享的是 Android NDK 開發(fā)的學(xué)習(xí)筆記,讓我們先開始了解 NDK 的構(gòu)建方式吧! NDK 構(gòu)建方式有兩種,一種是 ndk-build,另一種是 CMake,從 Android Studio 2.2 開始,Android Sudio 默認(rèn)地使用 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 集成了譬如 OpenSLVulkan 等 API 規(guī)范的特定實現(xiàn),以實現(xiàn)在 java 層無法做到的功能如提升音頻性能等
  • 增加反編譯難度

NDK 下載

可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載最新的 NDK 包

下載后所在目錄是 $(你的sdk目錄)/ndk-bundle,里面有很多重要的工具如 ndk-buildndk-gdb 等,之后會再做介紹。當(dāng)然,你也可以:

  • 下載過往版本的 NDK 包
  • 查看 NDK 修訂歷史記錄

關(guān)于 CMake

什么是 CMake

CMake 是一個開源的跨平臺工具系列,旨在構(gòu)建,測試和打包軟件。CMake用于使用簡單的平臺和獨立于編譯器的配置文件來控制軟件編譯過程,并生成可在選擇的編譯器環(huán)境中使用的本機makefile和工作空間。簡單點說,CMake 是一款外部構(gòu)建工具,從 Android Studio 2.2 開始,Android Sudio 默認(rèn)地使用 CMakeGradle 搭配使用來構(gòu)建原生庫。

CMake 下載

和在 Android Studio 中下載 NDK 一樣,可以直接通過 Android Studio >> SDK Manager >> SDK Tools 來下載 CMake:

當(dāng)然,你也可以:

  • 進一步了解 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目錄里是默認(rèn)生成的 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

讓我們來一步步分析默認(rèn)生成的 CMakeList.txt 里包含了哪些信息——

  • cmake_minimum_required() 首先開頭部分 cmake_minimum_required() 定義了所需 CMake的最低版本。
cmake_minimum_required(VERSION 3.4.1) 復(fù)制代碼
  • add_library() add_library() 命令用來添加庫,native-lib 對應(yīng)著生成的庫的名字,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) 復(fù)制代碼
  • find_library() 將?find_library()命令添加到 CMake 構(gòu)建腳本中以定位 NDK 庫,并將其路徑存儲為一個變量。可以使用此變量在構(gòu)建腳本的其他部分引用 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) 復(fù)制代碼

注:預(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() 命令中:
target_link_libraries( # Specifies the target library.native-lib# Links the target library to the log library# included in the NDK.${log-lib}) 復(fù)制代碼

當(dāng)然,你也可以查看:

  • Android NDK 原生 API
  • CMake 命令詳細信息文檔

編譯

編譯生成的apk里,就會找對應(yīng)名稱.so庫文件啦:

  • 項目的源碼已上傳到Github

本文為個人原創(chuàng),轉(zhuǎn)載請注明出處。

總結(jié)

以上是生活随笔為你收集整理的CMake 构建项目Android NDK项目基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。