The NDK contains the following:
- some platform headers and libraries for *each* supported native API level (e.g. NDK r7 contains files corresponding to API levels 3, 4, 5, 8, 9 and 14, intermediate API levels fallback to the nearest level below them, e.g. SDK API level 7 will map to native API level 5).
- some prebuilt toolchain binaries that run on your host machine and generate code that runs on ARM and x86 based Android devices (with the help of the above platform files)
- some helper libraries (e.g. C++ runtimes, or "cpu-features") that can be linked into your own code.
- a build system (invoked by ndk-build) that allows developers to write very small build control files to compile their sources with said toolchains. However, it is optional now, and you can use the toolchain binaries in "standalone" mode too.
Each new NDK release usually contains improvements to any of these items. More importantly:
- new platform headers/libraries for newer API levels (but still including the ones for earlier ones)
- eventually, misc fixes to the platform/headers libraries (e.g. typos)
- eventually, misc fixes to the toolchain binaries
- eventually, misc fixes, or additional, helper libraries
- misc fixes and improvements to the build system
Unless it contains bugs that prevent you to use it, there is no reason to use an older version of an NDK; even if you are targetting an old API level in your application, it should just be supported.
Hope this helps.
- David