Android JNI和NDK有什麼區別
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的登錄檔。JNI是Java Native Interface的縮寫,中文為JAVA本地呼叫。從Java1.1開始,Java Native Interface(JNI)標準成為java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行互動。JNI一開始是為了本地已編譯語言,尤其是C和C++而設計的,但是它並不妨礙你使用其他語言,只要呼叫約定受支援就可以了。使用java與本地已編譯的程式碼互動,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬體、作業系統進行互動,或者為了提高程式的效能。JNI標準至少保證原生程式碼能工作在任何Java 虛擬機器實現下。
標準的java類庫可能不支援你的程式所需的特性。 JNI·或許你已經有了一個用其他語言寫成的庫或程式,而你希望在java程式中使用它。你可能需要用底層語言實現一個小型的時間敏感程式碼,比如彙編,然後在你的java程式中呼叫這些功能。
NDK是Google公司推出的幫助Android開發者通過C/C++本地語言編寫應用的開發包,包含了C/C++的標頭檔案、庫檔案、說明文件和示例程式碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支援純C/C++編寫的應用,同時NDK提供的庫和函式功能很有限,僅僅處理些演算法效率敏感的問題,所以推薦初學者學好Java後再學習JNI。
NDK整合了交叉編譯器,並提供了相應的mk檔案隔離CPU、平臺、ABI等差異,開發人員只需要簡單修改mk檔案(指出“哪些檔案需要編譯”、“編譯特性要求”等),就可以建立出so。
NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
相關文章
- Android:JNI 與 NDK到底是什麼?Android
- 你真的瞭解 NDK 和 jni 的區別嗎
- *和body有什麼區別
- jni和ndk詳解
- Android中drawable和mipmap到底有什麼區別Android
- Cache 和 Buffer 有什麼區別?
- mongodb和mysql有什麼區別MongoDBMySql
- shim和polyfill有什麼區別
- float和double有什麼區別?
- int 和 Integer 有什麼區別
- cookie和session 有什麼區別?CookieSession
- session 和 cookie 有什麼區別?SessionCookie
- modbus和tcp有什麼區別?TCP
- Nginx和Apache有什麼區別?NginxApache
- COOKIE和SESSION有什麼區別?CookieSession
- RegisterClass和RegisterClassEx有什麼區別?
- for update 和 for update of 有什麼區別
- PEAR 和 PECL 有什麼區別?
- Activity和Fragment有什麼區別Fragment
- vue和react有什麼區別?VueReact
- Iterator和ListIterator有什麼區別
- Hifi和ONT 有什麼區別
- DOM和BOM有什麼區別?
- cookie是什麼?和session有什麼區別?CookieSession
- IPFS和區塊鏈有什麼區別區塊鏈
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- Java和Python是什麼?有什麼區別?JavaPython
- RPA和IPA有什麼區別
- Jsp和Servlet有什麼區別?JSServlet
- HTTP和HTTPS有什麼區別?HTTP
- VPS和HTTP有什麼區別?HTTP
- 命令和事件有什麼區別? - Oskar事件
- c++中&和&&有什麼區別C++
- DAO和Repository有什麼區別
- 青蛙和癩蛤蟆有什麼區別
- maven </dependencies>和</dependencyManagement> 有什麼區別Maven
- JMS和AMQP有什麼區別嗎MQ
- NDK 知識梳理(3) JNI 之 Java 和 JNI 資料型別對映Java資料型別