android jni調用c組件的說明_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、android JNI android JNI 文章分類 文章分類:移動開發(fā) 移動開發(fā) Java Native Interface (JNI)標準是 java 平臺的一部分,它允許 Java 代碼和 其他語言寫的代碼進行交互。 JNI 是本地編程接口, 它使得在 Java 虛擬機 (VM) 內部運行的 Java 代碼能夠與用其它編程語言(如 C、 C++ 和匯編語言)編寫的應用程序和庫進行交互操作。 1.從如何載入.so 檔案談起 由

2、于 Android 的應用層的類都是以 Java 寫的,這些 Java 類編譯為 Dex型式的 Bytecode 之后,必須靠 Dalvik 虛擬機(VM: Virtual Machine)來執(zhí)行。 VM 在 Android 平臺里,扮演很重要的角色。 此外,在執(zhí)行 Java 類的過程中,如果 Java 類需要與 C 組件溝通時,VM就會去載入 C 組件,然后讓 Java 的函數順利地調用到 C 組件的函數。此時,VM扮演著橋梁的角色,

3、讓 Java 與 C 組件能通過標準的 JNI 介面而相互溝通。 應用層的 Java 類是在虛擬機(VM: Vitual Machine)上執(zhí)行的,而 C 件不是在 VM 上執(zhí)行, 那么 Java 程式又如何要求 VM 去載入(Load)所指定的 C 組件呢? 可使用下述指令: System.loadLibrary(*.so 的檔案名); 例如,Android 框架里所提供的 MediaPlayer.java 類,含指令: publ

4、ic class MediaPlayer{ static { System.loadLibrary(“media_jni“); } } 這要求 VM 去載入 Android 的/system/lib/libmedia_jni.so 檔案。載 入*.so 之后,Java 類與*.so 檔案就匯合起來,一起執(zhí)行了。 2.如何撰寫*.so 的入口函數 LOGE(“ERROR: MediaPlayer native registra

5、tion failed\n“); goto bail; } if (register_android_media_MediaRecorder(env) < 0) { LOGE(“ERROR: MediaRecorder native registration failed\n“); goto bail; } if (register_android_media_MediaScanner(env) < 0) { LOGE(

6、“ERROR: MediaScanner native registration failed\n“); goto bail; } if (register_android_media_MediaMetadataRetriever(env) < 0) { LOGE(“ERROR: MediaMetadataRetriever native registration failed\n“); goto bail; } /* succ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論