The big three are ARMv5, ARMv7, and x86. ARMv7 devices can run ARMv5 instructions. ARMv7 CPUs have a floating-point co-processor, though, whereas ARMv5 do not. Hence, if you are doing a lot of floating-point work, I'd definitely have the NDK generate .so
files for each of those architectures. If you are not doing floating-point math, you could try skipping ARMv5.
While most Android devices are powered by ARM, x86 is making a late comeback. I have a blog post discussing libhoudini
as a way to avoid having dedicated x86 binaries, at a performance cost.
There is also Android support for MIPS. The next MIPS-powered Android device I see will be my first. Hence, developers often don't worry about this one, even though the NDK supports it (IIRC).