一.JNI概述。

JNI:是java與其他語言通信的橋樑。

需要用到JNI技術的地方:

1.需要調用java語言不支持的依賴於操作系統平台特性的一些功能。

2.為了整合一些以前的非java語言開發的系統。

3.為了節省程序的運行時間。必須採用其他語言(比如:c/c++)來提升運行效率。

JNI在android中的運用場景:音視頻開發、熱修復和插件化、逆向開發、系統源碼調用等。

二.Native方法註冊

Native方法註冊分為靜態註冊和動態註冊。

1.靜態註冊

原理:Java的Native方法通過指針來與JNI進行關聯。

過程:將需要關聯的java文件編譯和生成JNI方法。執行如下命令:

javac com/example/MediaRecorder.java

javah com.example.MediaRecorder

缺點:

①.JNI層的函數名稱太長。

②.聲明Native方法的類需要用到javah生成的頭文件。

③.初次調用Native方法時需要建立關聯,影響效率。

2.動態註冊

MedioRecorder動態註冊過程源碼解析:

①.在android_media_MediaRecorder.cpp中的gMethods數組中存儲着Native方法與JNI層函數對應關係。

②.在android_media_MediaPlayer.cpp中調用register_android_media_recorder(env)方法。

③.最終調用JNIHelp.cpp中的JNIEnv的RegisterNatives函數來完成JNI的動態註冊。

三.數據類型轉換(基礎數據類型,引用數據類型)詳細見240頁。

四.方法簽名:由簽名格式組成。

簽名格式:(參數簽名格式...)返回值簽名格式

五.解析JNIEnv

主要作用:1.調用java方法;2.操作java(操作java中的變量及對象等)

常用操作:

1.FindClass找到Java中指定名稱的類。

2.GetMethodID用來得到Java中的方法。

3.GetFieldID用來得到Java中的成員變量。

六.引用類型 ———————————————— 版權聲明:本文為CSDN博主「龔禮鵬」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/gongjdde/article/details/89753778