Android JNI開發詳解(1)-JNI開發介紹

原文出處:http://www.ccbu.cc/index.php/android/android-jni-intro.html

什麼是JNI

JNI是Java Native Interface的縮寫,中文譯爲“Java本地接口”,它提供了若干的API實現了Java和其他語言的通信(主要是C&C++)進行相互調用,從Java1.1開始,JNI標準成爲java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。所以,JNI技術是JAVA與本地世界的通信橋樑,通過這種技術可以做到以下兩點:

  • Java程序中的函數可以調用Native語言寫的函數,Native一般指的是C/C++編寫函數。

  • Native程序中的函數可以調用Java層的函數,也就是說在C/C++程序中可以調用Java的函數。

爲什麼需要JNI

Java本身是平臺無關的高級開發語言,爲什麼還要引入JNI技術呢?C和C++編寫的JNI程序不是破壞和JAVA的平臺無關係了嗎?Java從一開始就支持JNI,主要的原因可以歸結於以下幾點。

  1. Java世界的虛擬機是用Native語言寫的,而虛擬機又運行在具體的平臺上,所以虛擬機本身無法做到平臺無關。然而,有了JNI技術後,就可以對Java層屏蔽不同操作系統平臺之間的差異了。這樣,就能實現Java本身的平臺無關特性。
  2. 早期的很多程序庫及供功能模塊都是由C,C++等本地語言開發的,Java通過Jni技術就可以直接使用這些功能了。
  3. 使用C,C++等本地語言開發的程序庫執行效率相對更高,在一些對性能要求很高的場景,需要使用JNI技術。如遊戲,音視頻等開發中設計到的解碼,圖像繪製等操作。

Android中的JNI

Android是基於Linux的,其核心庫很多都是C/C++的,存在大量的本地庫,這些早期已經很成熟的C語言和C++編寫的庫被Android系統大量使用。下圖是Android系統的架構圖,圖中的Libraries幾乎全部是C和C++編寫的本地庫,Framework中也有大量的使用C和C++編寫完成的功能模塊。因此,當我們深入到Android的底層去研究Android原碼時才發現處處都可能與JNI打交道。

在這裏插入圖片描述

NDK ( Native Development Kit )

在Android開發中,爲了方便進行本地庫開發,google官方爲我們提供了NDK開發工具包。NDK即Native Develop Kit。Android NDK 是一套允許您使用原生代碼語言(例如C和C++) 實現部分應用的工具集。在開發某些類型應用時,這有助於您重複使用以這些語言編寫的代碼庫。NDK本身其實就是一個交叉工作鏈,包含了Android上的一些庫文件,另外,NDK爲了方便使用,提供了一些腳本,使得更容易的編譯C/C++代碼。

在 Android 應用中使用原生代碼對於想執行以下一項或多項操作的開發者特別有用:

  • 在平臺之間移植其應用。
  • 重複使用現有庫,或者提供其自己的庫供重複使用。
  • 在某些情況下提高性能,特別是像遊戲這種計算密集型應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章