NDK通過CMake和Ninja編譯應用的C/C++代碼,編譯過程如下圖所示紊扬。
核心編譯過程如下:
根據CMake配置腳本以及build-profile.json5中配置的externalNativeOptions構建參數昌执,與緩存中的配置比對后,生成CMake命令并執(zhí)行CMake射富。
執(zhí)行Ninja矢门,按照makefile執(zhí)行編譯和鏈接盆色,將生成的.so以及運行時依賴的.so同步到輸出目錄,完成構建過程祟剔。
通過DevEco Studio提供的應用模板隔躲,可以快速生成CMake構建腳本模板,并在build-profile.json5中指定相關編譯構建參數物延。
CMakeLists.txt
通過DevEco Studio模板工程創(chuàng)建的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表示產物為動態(tài)庫粪糙,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腳本中添加了編譯所需的源代碼蓉冈、頭文件以及三方庫城舞,開發(fā)者可根據實際工程添加自定義編譯參數、函數聲明寞酿、簡單的邏輯控制等家夺。
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。