優勢
由於基於虛擬機的語言在運行上比基於C語言或c++的效率低,因此通過NDK編譯的原生程式不僅可以在特定的環境下工作,且能維持運行的高效率。並且通常只要硬體允許,NDK可以兼容任何C語言的庫,因此在功能上彌補了一些SDK開發的不足。
劣勢
雖然NDK的程式運行效率更高,但既然軟體本身使用虛擬機語言開發一定在開發效率上有優勢。因此相對而言在NDK上開發程式的難度比SDK上要高。
原理
基於java的軟體NDK通過JNI進行調度,由於java語言支持調用C/C++動態程式庫,因此可以令java 的程式執行部分C語言代碼,這為NDK的使用提供了可能。
舉例
常見的原生開發工具包有Android的NDK和webOS。
軟體開發工具包
軟體開發工具包( Software Development Kit, SDK)一般是一些被軟體工程師用於為特定的軟體包、軟體框架、硬體平台、作業系統等創建套用軟體的開發工具的集合。
它或許只是簡單的為某個程式語言提供應用程式接口的一些檔案,但也可能包括能與某種嵌入式系統通訊的複雜的硬體。一般的工具包括用於調試和其他用途的實用工具。 SDK還經常包括示例代碼、支持性的技術註解或者其他的為基本參考資料澄清疑點的支持文檔。
軟體工程師通常從目標系統開發者那裡獲得軟體開發包。為了鼓勵開發者使用其系統或者語言,許多 SDK是免費提供的。 SDK經常可以直接從網際網路下載。有時也被作為行銷手段。例如: 甲產品或許會免費提供 構件SDK以鼓勵人們使用它,從而會吸引更多人由於能免費為其編程而購買其構件。
SDK可能附帶了使其不能在不兼容的許可證下開發軟體的許可證。例如一個專有的 SDK可能與自由軟體開發牴觸。而GPL能使 SDK與專有軟體開發 近乎不兼容。LGPL下的SDK則沒有這個問題。
應用程式接口
應用程式接口(英語: Application Programming Interface,簡稱: API),又稱為 套用編程接口,就是軟體系統不同組成部分銜接的約定。由於近年來軟體的規模日益龐大,常常需要把複雜的系統劃分成小的組成部分,編程接口的設計十分重要。程式設計的實踐中,編程接口的設計首先要使軟體系統的職責得到合理劃分。良好的接口設計可以降低系統各部分的相互依賴,提高組成單元的內聚性,降低組成單元間的耦合程度,從而提高系統的維護性和擴展性。