程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JNI和NDK的區別

JNI和NDK的區別

編輯:關於JAVA

NDK(Native Development Kit)“原生”也就是二進制

android常用的開發方式是java封裝 的庫,而這些庫的底層實現是由C/C++實現,如媒體,圖形庫等

java調用這樣實現就需要用JNI (Java Native Interface)

平時用的也就是google給我們封裝的好的庫,即底層實現用的不是 Java,但都有統一的Java接口

NDK的作用是“我們自己寫本地代碼”(C/C++),自己用JNI封裝 成Java接口

比如我們想做個計算,顯然這不是Java的強項,但可以用C/C++來寫實現,返回一個 運算結果就行了

NDKr5已經實現了不用寫一行Java代碼開發程序了,只不過還是用到了虛擬機, 細節被封裝隱藏起來了而已

對於JNI和NDK很多Android開發初學者沒有搞明白這個問題

JNI是Java調用Native機制,是Java語言自己的特性全稱為 Java Native Interface,類似的還 有微軟.Net Framework上的p/invoke,可以讓C#或Visual Basic.Net調用C/C++的API,所以說JNI和 Android沒有關系,在PC上開發Java的應用,如果運行在Windows平台使用 JNI是是經常的,比如說讀寫 Windows的注冊表。

NDK是Google公司推出的幫助Android開發者通過C/C++本地語言編寫應用的 開發包,包含了C/C++的頭文件、庫文件、說明文檔和示例 代碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支持純C/C++編寫的應用,同時NDK提供的庫和函數功能 很有限,僅僅處理些算法效率敏感的 問題,所以Android123推薦初學者學好Java後再學習JNI。

NDK其實多了一個把.so和.apk打包的工具,這個是很重要的。

而JNI開發並沒有打包, 只是把.so文件放到文件系統的特定位置。

如果是做應用開發,則需要NDK工具,不然你開發的 應用程序怎麼給用戶用呢?難道幫他重新編譯文件系統?

其他至於實現,java調用本地C/C++函 數,及其編寫方式,我覺得JNI和NDK沒有什麼區別。

還有一個我個人理解,NDK開發C/C++只能 能使用NDK自帶的有限的頭文件,而使用JNI則可以使用文件系統中帶的頭文件,比如 utils/Log.h

而後者的資源更多,當然NDK正在努力開發中,以便支持更豐富的接口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved