Android NDK—CMake配置及使用

安裝NDK和CMake

  1. 打開AS的Prefrences—>Android SDK—>SDK Tools
  • 選中 NDK (Side by side)CMake 複選框。我這裏之前在nkd-bundle中已經安裝NDK就沒有卸載了

    注意:如果您在 ndk-bundle 文件夾中安裝了 NDK,它會顯示在標籤爲 NDK 的列表中。如果您使用的是 Android Gradle 插件 3.5.0 或更高版本,則可以選中或取消選中該複選框。取消選中該複選框會卸載 NDK,釋放磁盤空間,並使該複選框從列表中消失。如果您卸載舊版 NDK,請從項目的 local.properties 文件中移除 ndk.dir 值,該值現已棄用。

  1. 打開項目結構 Project Structure—>SDK Location
  • 配置Android NDK路徑

新建NDK項目

新建項目,選擇Native C++
在這裏插入圖片描述
選擇默認的C++庫即可

點擊完成,初始化項目,構建結束會在src目錄下生成一個cpp目錄,內部包含一個c++源文件native-lib.cpp和一個CMake配置文件CMakeLists.txt

build.gradle配置

  • abiFiltes:設置生成的.so庫所支持的CPU結構
    在這裏插入圖片描述

代碼實現

接下來逐個看下這兩個文件內容

  • native-lib.cpp

    c++源文件,內部實現了Java層聲明Native方法

    先看下java層聲明的Native方法
    在這裏插入圖片描述

    與其對應的c++實現文件

    其中c++源文件中對應函數命名規則爲:Java_應用包名_類名_方法名(JNIEnv *env,jobject thiz)

    注意:包名中的.需要替換爲_

    在這裏插入圖片描述

  • CMakeLists.txt
    在這裏插入圖片描述

編譯構建

上面代碼是我們創建一個NDK項目系統生成的樣例,如果我們需要自己實現NDK業務,步驟如下:

  • Java層聲明Native方法
  • 生成對應的C++方法並實現業務邏輯
  • 配置CMakeLists.txt構建腳本
  • 編譯構建

經過上述步驟,會默認在app->build->intermediates->cmake->debug/release->obj目錄下生成所支持的不同CPU架構的的動態庫(.so),在我們打包時候會一併打包到APK中。
在這裏插入圖片描述
ps:當然我們也可以指定動態庫的生成路徑。例如,將構建的so動態庫文件存儲在應用項目app->jniLibs目錄下:在CMakeLists.txt構建腳本中我們指定如下腳本():
在這裏插入圖片描述

如何使用

自身項目使用

所謂自身項目使用:即在當前項目內通過Java層聲明Native方法,並且在當前項目中通過C/C++實現Native方法,然後通過CMake編譯生成so動態庫後在當前項目內直接使用,如下:

在需要調用Native的業務處通過static{System.loadLibrary("name");}加載動態庫,然後直接調用Native方法即可
在這裏插入圖片描述

其他項目使用

相對於自身使用,還有一種方式就是將A項目通過CMake編譯後的so動態庫文件提供給B(其他)項目使用,具體步驟如下:

  • A項目

    1. Java層聲明native方法
      在這裏插入圖片描述

    2. 生成對應c/c++源文件並實現
      在這裏插入圖片描述

    3. 配置CMakeLists.txt腳本文件並編譯生成so動態庫

    4. 將生成的so動態度copy給B(其他)項目
      在這裏插入圖片描述

  • B項目

    1. 將A項目提供的so動態庫文件放在項目的jniLibs目錄下,或者libs目錄下所支持對應的cpu架構目錄下(必須在build.gradle中重定向jniLibs.srcDirs=['libs']),並配置應用所支持的CPU架構(需要依據提供方給到所支持的so動態庫來配置)
      在這裏插入圖片描述

    2. 聲明native方法(native方法的包名與類名必須與提供方一致,可讓提供方連同so動態庫一起提供)
      在這裏插入圖片描述

    3. 在項目中使用

      配置完成後,在項目需要使用的地方,通過如下代碼加載動態庫後即可使用
      在這裏插入圖片描述

更多閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章