[轉載請註明出處] http://kezeodsnx.pixnet.net/blog
作者: kezeodsnx
簡介
NDK是SDK的companion tool,N是指Native,有一點imply performance的感覺,開發者可透過NDK繞過application framework,指接使用底層的資源。NDK需與SDK搭配使用。可在此下載。
NDK讓開發者可以在自己的android應用程式中使用所謂的native code,這些code可能是由C/C++實作,這對暨存的C/C++程式在移植到android上有相當大的便利。對此,NDK提供了以下:
1. 一套用來從C/C++產生native code library的tool/build files
2. 將native library崁入apk的方法
3. 一套native system所需的header和library,並將相容於1.5之後的版本
4. 文件,範例,howto
1.5版只有支援armv5te的指令集,目前並無x86的支援。此版提供了指令集和libc,libm等以及JNI的interface的header。值得一提的是,所謂native並不保證performance一定會更好,然而複雜度是提升的。因此要了解什麼樣的功能適合使用native code。通常所謂self-contained,CPU-bound,不需大量memory是比較可行的功能,如signal processing。因此,單純的將java改寫為C並不會提升效能。總的來說,多一層JVM一定會影響到performance,而native的程式,應該有"很大的"機會提昇效能吧!
android基於linux,當然是支援C的,並不是在有NDK後才可用C來開發。JAVA有所謂的JNI來調用C的函式庫,比如說用arm的 cross compile tool編譯so檔,再用JNI的方式讓JAVA呼叫。NDK的出現是讓這個模式有了官方的一致性,但NDK不可用來開發native-only的程式, 主要還是在Dalvik上的runtime。
Content
NDK包含了一套toolchain (指compiler, linker),其提供的header如下:
- libc (C library) headers
- libm (math library) headers
- JNI interface headers
- libz (Zlib compression) headers
- liblog (Android logging) header
- A Minimal set of headers for C++ support
NKD也提供完整的開發環境,只要將build file(Android.mk)寫好,指定source的位置(sources/samples/app-name)及會用到的應用程式,NDK會compile好,然後將這個library放到該應用程式(即project/app-name/libs/下)。
Reference
留言列表