在專案中新增 C 和 C++ 程式碼

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

如要在 Android 專案中新增 C 和 C++ 程式碼,只要將程式碼放入專案模組的 cpp 目錄中即可。當您建構專案時,這個程式碼會編譯為可透過 Gradle 封裝至應用程式的原生資料庫。這樣一來,您的 Java 或 Kotlin 程式碼就能透過 Java Native Interface (JNI) 呼叫原生資料庫中的函式。如要進一步瞭解如何使用 JNI 架構,請參閱 Android 適用的 JNI 提示

Android Studio 支援 CMake,這對於跨平台專案非常實用。Android Studio 也支援 ndk-build,其速度比 CMake 快,但僅支援 Android。目前不支援在相同模組中同時使用 CMake 和 ndk-build

如要將現有的 ndk-build 程式庫匯入至 Android Studio 專案,請參閱這篇文章,瞭解如何將 Gradle 連結至原生資料庫專案。

本頁面將說明如何使用必要的建構工具設定 Android Studio、透過 C/C++ 支援功能建立新專案,以及在專案中新增 C/C++ 檔案

如要改為在現有專案中新增原生程式碼,請按照下列步驟操作:

  1. 建立新的原生來源檔案,並將其新增至 Android Studio 專案。
    • 如果已有原生程式碼,或想要匯入預先建構的原生資料庫,請略過這個步驟。
  2. 設定 CMake,以便將原生原始碼建構到資料庫中。如要匯入預先建構的資料庫或平台程式庫並建立連結,就必須使用這個建構指令碼。
    • 如果現有原生資料庫已含有 CMakeLists.txt 建構指令碼,或使用 ndk-build 且包含 Android.mk 建構指令碼,請略過這個步驟。
  3. 提供指向 CMake 或 ndk-build 指令碼檔案的路徑,藉此設定 Gradle。Gradle 會使用建構指令碼將原始碼匯入至 Android Studio 專案,並將原生資料庫封裝至應用程式。

設定專案後,就可以使用 JNI 架構透過 Java 或 Kotlin 程式碼存取原生函式。如要建構並執行應用程式,只要按一下「Run」圖示 執行,然後從選單列執行應用程式 即可。

注意:如果現有專案使用的是已淘汰的 ndkCompile 工具,請改用 CMake 或 ndk-build

下載 NDK 和建構工具

如要編譯及偵錯應用程式的原生程式碼,您需要下列元件:

  • Android Native Development Kit (NDK):這個工具組可讓您搭配 Android 使用 C 和 C++ 程式碼。NDK 提供平台程式庫,可用於管理原生活動,以及存取感應器和觸控輸入等實體裝置元件。
  • CMake:與 Gradle 搭配運作的外部建構工具,可建構原生資料庫。如果您只打算使用 ndk-build,就不需要這個元件。
  • LLDB:Android Studio 中的偵錯工具,可用來為原生程式碼進行偵錯

如需瞭解如何安裝這些元件,請參閱「安裝並設定 NDK 和 CMake」一文。

建立支援 C/C++ 的新專案

如要建立支援原生程式碼的新專案,其程序與建立任何其他 Android Studio 專案類似,但還有額外步驟:

  1. 在精靈的「Choose your project」區段,選取「Native C++」專案類型。
  2. 按一下「Next」
  3. 在精靈的下一個區段中填寫所有其他欄位。
  4. 按一下「Next」
  5. 在精靈的「Customize C++ Support」區段,您可以使用「C++ Standard」欄位自訂專案。
    • 使用下拉式清單選取要使用的 C++ 標準化功能。選取「Toolchain Default」可使用預設的 CMake 設定。
  6. 按一下「Finish」

Android Studio 建立新專案後,請開啟 IDE 左側的「Project」窗格,然後從選單中選取「Android」檢視畫面。如圖 1 所示,Android Studio 新增了「cpp」群組:

圖 1. 用於原生來源和外部建構指令碼的 Android 檢視畫面群組。

注意:這個檢視畫面並不會依照磁碟中實際的檔案階層呈現,而會將類似檔案分組來簡化專案瀏覽方式。

cpp 群組可呈現所有原生來源檔案、標頭、CMake 或 ndk-build 的建構指令碼,以及專案中預先建構的程式庫。如果是新專案,Android Studio 會建立 C++ 範例來源檔案 native-lib.cpp,並置入應用程式模組的 src/main/cpp/ 目錄中。這個程式碼範例提供簡單的 C++ 函式 stringFromJNI(),可傳回 "Hello from C++" 字串。如要瞭解如何在專案中新增其他來源檔案,請參閱如何建立新的原生來源檔案相關章節。

build.gradle 檔案指示 Gradle 如何建構應用程式的方式類似,CMake 與 ndk-build 也需要透過建構指令碼瞭解如何建構原生資料庫。如果是新專案,Android Studio 會建立 CMake 建構指令碼 CMakeLists.txt,並置入模組的根目錄中。如要進一步瞭解此建構指令碼的內容,請參閱「設定 CMake」一文。

建構並執行範例應用程式

按一下「Run」圖示 從選單列執行並執行應用程式 後,Android Studio 就會建構並啟動應用程式,在 Android 裝置或模擬器上顯示「Hello C++」的訊息。以下概要說明建構及執行範例應用程式時會發生的事件:

  1. Gradle 呼叫外部建構指令碼 CMakeLists.txt
  2. CMake 按照建構指令碼中的指令,將 C++ 來源檔案 native-lib.cpp 編譯成共用物件資料庫,並將其命名為 libnative-lib.so。Gradle 隨後將其封裝至應用程式。
  3. 在執行階段,應用程式的 MainActivity 會使用 System.loadLibrary() 載入原生資料庫。應用程式現在可以使用資料庫的原生函式 stringFromJNI()
  4. MainActivity.onCreate() 呼叫 stringFromJNI(),這項動作會傳回 "Hello from C++" 並用於更新 TextView

如要驗證 Gradle 是否已將原生資料庫封裝在應用程式中,請使用 APK 分析工具

  1. 依序選取「Build」>「Build Bundles(s)/APK(s)」>「Build APK(s)」
  2. 依序選取「Build」>「Analyze APK」
  3. app/build/outputs/ 目錄中選取 APK 或 AAB,然後按一下「OK」
  4. 如圖 2 所示,libnative-lib.so 顯示在 APK 分析工具視窗中的 lib/<ABI>/ 底下。

    圖 2. 使用 APK 分析工具找出原生資料庫。

提示:如要試用其他使用原生程式碼的 Android 應用程式,請依序點選「File」>「New」>「Import Sample」,然後從 Ndk 清單中選取範例專案。

建立新 C/C++ 來源檔案

如要在現有專案中新增 C/C++ 來源檔案,請按照下列步驟操作:

  1. 如果應用程式的主要來源集中沒有 cpp/ 目錄,請按照下列步驟建立該目錄:
    1. 開啟 IDE 左側的「Project」窗格,然後從選單中選取「Project」檢視畫面。
    2. 依序前往「your-module」>「src」
    3. 在「main」目錄上按一下滑鼠右鍵,然後依序選取「New」>「Directory」
    4. 輸入 cpp 做為目錄名稱,然後按一下「OK」

  2. cpp/ 目錄上按一下滑鼠右鍵,然後依序選取「New」>「C/C++ Source File」
  3. 輸入來源檔案的名稱,例如 native-lib
  4. 從「Type」選單中,選取來源檔案的副檔名,例如 .cpp
    • 按一下「Edit File Types」圖示 ,在選單中新增其他檔案類型,例如 .cxx.hxx。在隨即彈出的「New File Extensions」對話方塊中,從「Source Extension」和「Header Extension」選單中選取其他副檔名,然後按一下「OK」
  5. 如要建立標頭檔案,請勾選「Create an associated header」核取方塊。
  6. 按一下「OK」

在專案中新增 C/C++ 檔案之後,您還是需要設定 CMake,將檔案納入原生資料庫中。

其他資源

如要進一步瞭解如何在應用程式中支援 C/C++ 程式碼,請嘗試使用下列資源。

程式碼研究室