What do you like best?
If you are writing application for the android platform and you have a real need of performance or security you will need to write native code. Using NDK is the only available solution for the time being, but with it you can access your native shared libraries from the comfort of the java language via the jni interface.
With the recent enhancements in the android studio, writing native and java code is easier than ever.
What do you dislike?
It's quiet tedious to start writing c/c++ code with the jni in mind, and debugging the shared libraries cannot be done without the android application running.
Some test automation are still lacking but that's more due to the nature of the android platform than NDK itself.
You can to some extend write a large portion of the android application using NDK but some services are still missing or require a better support.
Recommendations to others considering the product
NDK can provide a substantial boost of performance and security to your android application. It also enables you to have access to the large repositories of codes already written in c/c++ with a little effort of adaptation. But keep in mind that as for all platform specific code, you will have to abide by the system and architectural limitation.
What business problems are you solving with the product? What benefits have you realized?
We used NDK the first time to speed up some image recognition application and then we tried opencv for android with processor specific build and the increase in performance was significant. We also used it to obfuscate some critical logic that we could not simply leave in the java code which is easily reversible.