鴻蒙HarmonyOS應用開發之使用DevEco Studio模板構建NDK工程

NDK通過CMake和Ninja編譯應用的C/C++代碼,編譯過程如下圖所示。

核心編譯過程如下:

  1. 根據CMake配置腳本以及build-profile.json5中配置的externalNativeOptions構建參數,與緩存中的配置比對后,生成CMake命令并執行CMake。

  2. 執行Ninja,按照makefile執行編譯和鏈接,將生成的.so以及運行時依賴的.so同步到輸出目錄,完成構建過程。

通過DevEco Studio提供的應用模板,可以快速生成CMake構建腳本模板,并在build-profile.json5中指定相關編譯構建參數。

CMakeLists.txt

通過DevEco Studio模板工程創建的NDK工程中,包含默認生成的CMakeLists.txt腳本,如下所示:

# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(MyApplication) 

# 定義一個變量,并賦值為當前模塊cpp目錄
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

# 添加頭文件.h目錄,包括cpp,cpp/include,告訴cmake去這里找到代碼引入的頭文件
include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)

# 聲明一個產物libentry.so,SHARED表示產物為動態庫,hello.cpp為產物的源代碼
add_library(entry SHARED hello.cpp)

# 聲明產物entry鏈接時需要的三方庫libace_napi.z.so
# 這里直接寫三方庫的名稱是因為它是在ndk中,已在鏈接尋址路徑中,無需額外聲明
target_link_libraries(entry PUBLIC libace_napi.z.so)

默認的CMakeLists.txt腳本中添加了編譯所需的源代碼、頭文件以及三方庫,開發者可根據實際工程添加自定義編譯參數、函數聲明、簡單的邏輯控制等。

externalNativeOptions

模塊級build-profile.json5中externalNativeOptions參數是NDK工程C/C++文件編譯配置的入口,可以通過path指定CMake腳本路徑、arguments配置CMake參數、cppFlags配置C++編譯器參數、abiFilters配置編譯架構等。

"apiType": "stageMode",
"buildOption": {
  "arkOptions": {
   },
  "externalNativeOptions": {
    "path": "./src/main/cpp/CMakeLists.txt",
    "arguments": "",
    "cppFlags": "",
    "abiFilters": [
       "arm64-v8a",
       "armeabi-v7a",
       "x86_64"
    ],
  }
}

externalNativeOptions具體參數說明如下表所示。

更多關于build-profile.json5中參數的說明,請參考build-profile.json5

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容