NDK開發系列第一章

什麼是NDK

Android NDK 是一組容許您將 C 或 C++(「原生代碼」)嵌入到 Android 應用中的工具。html

在 Android 應用中使用原生代碼的應用場景

  • 在平臺之間移植其應用。
  • 重複使用現有庫,或者提供其本身的庫供重複使用。
  • 在某些狀況下提升性能,特別是像遊戲這種計算密集型應用。

爲 Android 構建原生應用時使用的主要組件

  • ndk-build:ndk-build 腳本用於在 NDK 中心啓動構建腳本。
    • 自動探測您的開發系統和應用項目文件以肯定要構建的內容。
    • 生成二進制文件。
    • 將二進制文件複製到應用的項目路徑。
  • Java:Android 構建過程從 Java 來源生成 .dex (Dalvik EXecutable) 文件,這些文件是 Android OS 在 Dalvik 虛擬機(「DVM」)中運行的文件。 即便您的應用根本未包含任何 Java 源代碼,構建過程仍會生成原生組件在其中運行的 .dex 可執行文件。
  • 原生共享庫:NDK 從原生源代碼構建這些庫或 .so 文件。
  • 原生靜態庫:NDK 也可構建靜態庫或 .a 文件,您能夠關聯到其餘庫。
  • Java 原生接口 (JNI):JNI 是 Java 和 C++ 組件用以互相溝通的接口。
  • 應用二進制界面 (ABI):ABI 能夠很是精確地定義應用的機器代碼在運行時如何與系統交互。 NDK 根據這些定義構建 .so 文件。 不一樣的 ABI 對應不一樣的架構:NDK 包含對 ARMEABI(默認)、MIPS 和 x86 的 ABI 支持。
  • 清單:若是您要編寫沒有 Java 組件的應用,必須在清單中聲明 NativeActivity 類。

下面兩個項目僅在使用 ndk-build 腳本構建時以及使用 ndk-gdb 腳本調試時才須要。android

  • Android.mk:必須在 jni 文件夾內建立 Android.mk 配置文件。 ndk-build 腳本將查看此文件,其中定義了模塊及其名稱、要編譯的源文件、版本標誌以及要連接的庫。
  • Application.mk:此文件枚舉並描述您的應用須要的模塊。 這些信息包括:
    • 用於針對特定平臺進行編譯的 ABI。
    • 工具鏈。
    • 要包含的標準庫(靜態和動態 STLport 或默認系統)。

開發Android原生應用的通常流程

  1. 設計應用,肯定要在 Java 中實現的部分,以及要以原生代碼形式實現的部分。
  2. 像建立任何其餘 Android 項目同樣建立一個 Android 應用項目。
  3. 在「JNI」目錄中建立一個描述原生庫的 Android.mk 文件,包括名稱、標誌、連接庫和要編譯的源文件。
  4. 或者,也能夠建立一個配置目標 ABI、 工具鏈、發行/調試模式和 STL 的 Application.mk 文件。對於其中任何您未指明的項目,將分別使用如下默認值:
    • ABI:armeabi
    • 工具鏈:GCC 4.8
    • 模式:發行
    • STL:系統
  5. 將原生來源置於項目的 jni 目錄下。
  6. 使用 ndk-build 編譯原生(.so.a)庫。
  7. 構建 Java 組件,生成可執行 .dex 文件。
  8. 將全部內容封裝到一個 APK 文件中,包含 .so.dex 以及應用運行所需的其餘文件。###

Tips

  1. 本系列文章開發工具採用Android Studio
  2. 構建工具使用CMake,可是爲了兼容舊項目,會簡要介紹一下Android.mk文件
  3. demo地址:https://github.com/cmder/ndkdemo.git
相關文章
相關標籤/搜索