一.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