日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

《Android的设计与实现:卷I》——第2章 框架基础JNI

發(fā)布時(shí)間:2025/6/15 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Android的设计与实现:卷I》——第2章 框架基础JNI 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第2章 框架基礎(chǔ)JNI

JNI(Java Native Interface,Java本地接口)是Java平臺(tái)上定義的一套標(biāo)準(zhǔn)的本地編程接口。JNI允許Java代碼與本地代碼互操作,即Java代碼可以調(diào)用本地代碼,本地代碼也可以調(diào)用Java代碼。所謂本地代碼指的是用其他編程語(yǔ)言(如C/C++)實(shí)現(xiàn)的、依賴于特定硬件和操作系統(tǒng)的代碼。通過(guò)JNI調(diào)用本地代碼,可以實(shí)現(xiàn)Java語(yǔ)言所不能實(shí)現(xiàn)的功能。在Android平臺(tái)上,Dalvik虛擬機(jī)會(huì)實(shí)現(xiàn)JNI定義的接口。

2.1 JNI在Android系統(tǒng)中所處的位置

Android采用分層的體系結(jié)構(gòu):上層的應(yīng)用層和應(yīng)用框架層主要使用Java語(yǔ)言開(kāi)發(fā);下層則運(yùn)行一個(gè)Linux內(nèi)核,并在內(nèi)核之上集成了各種核心庫(kù)和第三方庫(kù),以提供系統(tǒng)運(yùn)行所需的服務(wù),這部分是用C和C++語(yǔ)言開(kāi)發(fā)。連接這兩部分的紐帶就是JNI。
JNI在Android系統(tǒng)中所處的位置如圖2-1所示。


從圖2-1中可以看出,JNI可以直接調(diào)用本地代碼庫(kù),并可以通過(guò)Dalvik虛擬機(jī)實(shí)現(xiàn)與應(yīng)用層和應(yīng)用框架層之間的交互。Android JNI部分的代碼主要位于Android體系結(jié)構(gòu)中的上面兩層:

應(yīng)用層:采用NDK開(kāi)發(fā),主要使用標(biāo)準(zhǔn)JNI編程模型實(shí)現(xiàn)。

應(yīng)用框架層:Android定義了一套JNI編程模型,使用函數(shù)注冊(cè)方式彌補(bǔ)了標(biāo)準(zhǔn)JNI編程模型的不足。

Android應(yīng)用框架層JNI部分源碼主要位于frameworks/base/目錄下。按照模塊組織,不同的模塊將被編譯為不同的共享庫(kù),分別為上層提供不同的服務(wù)。這些共享庫(kù)最終會(huì)被放置在目標(biāo)系統(tǒng)的/system/lib目錄下。

注意 NDK與JNI的區(qū)別: NDK是為便于開(kāi)發(fā)基于JNI的應(yīng)用而提供的一套開(kāi)發(fā)和編譯工具集;而JNI則是一套編程接口,可以運(yùn)用在應(yīng)用層,也可以運(yùn)用在應(yīng)用框架層,以實(shí)現(xiàn)Java代碼與本地代碼的互操作。

JNI編程模型的結(jié)構(gòu)十分清晰,可以概括為以下三個(gè)步驟:
步驟1 Java層聲明Native方法。
步驟2 JNI層實(shí)現(xiàn)Java層聲明的Native方法,在JNI層可以調(diào)用底層庫(kù)或者回調(diào)Java層方法。這部分將被編譯為動(dòng)態(tài)庫(kù)(SO文件)供系統(tǒng)加載。
步驟3 加載JNI層代碼編譯后生成的共享庫(kù)。
JNI的很多概念比較模糊,為了不引起歧義,這里規(guī)定本書中的涉及名詞的含義。

native:特指Java語(yǔ)言中的方法修飾符native。

Native方法:特指Java層中聲明的、用native修飾的方法。

JNI層:特指采用JNI技術(shù)實(shí)現(xiàn)Java層聲明的Native方法的部分。

JNI函數(shù):特指JNIEnv提供的函數(shù)。

JNI方法:特指Native方法對(duì)應(yīng)的JNI層實(shí)現(xiàn)方法。

了解了JNI的主要概念和基本結(jié)構(gòu),下一節(jié)將以一個(gè)實(shí)例詳細(xì)分析JNI編程的三個(gè)步驟。

總結(jié)

以上是生活随笔為你收集整理的《Android的设计与实现:卷I》——第2章 框架基础JNI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。