android sdk (Android Software Development Kit, 即android軟件開發工具包)可以說只要你使用java去開發Android這個東西就必須用到。他包含了SDK Manager 和 AVD Manage,對於android系統的一些開發版本的管理以及模擬器管理。它只能運行純java程序,有了它模擬器才可以使用。
而ndk (Native Development Kit)跟sdk差不多的是它也是一個開發工具包。用它開發c/c++是很方便的。他有一個強大的編譯集合。Java調C、C++(jni接口),是一些java如何調C的代碼。它會把C代碼編譯成一個.SO的動態庫,通過jni接口用java代碼去調用它,有了它我們可以直接在android代碼中去添加C代碼。
出現ndk的原因:
很早以前android是只有sdk的。並沒有ndk。這就意味着一旦android的開發者要使用c/c++的三方庫或者需要用到c/c++就必須使用非官方的法子,用java的jni去調用c/c++。就像耍小聰明走后門一樣。而ndk的出現就意味着jni調用的這種方法轉正了變成官方了以后你不需要再走后面大路正面隨你走。如果要操作底層直接操作內存,操作地址那不得不去使用c/c++因為java這塊想做這些有點困難。所以ndk是必須需要出現的。對於android來說sdk和ndk是同種語言的2種不同時期的必須品。
http://blog.csdn.net/ffmxnjm/article/details/52159535