In-Depth: Running Native Code On Android - Part 1
20.05.12
I'm not taking it personally, but I wasn't joking. I wasn't sure what you meant by "complex". Sure, the function definition is not code-friendly, and there are other aspects of JNI that many programmers would change. But not all functions have to be like that. Only functions that you will call directly from Java. On a game for example, you might end up calling two functions from Java, Update() and Render(), or even do them both in a single function. The rest of your C/C++ code can follow the normal naming conventions. Complex objects are passed to native code as jobject instances, and using all those GetMethodID and GetFieldID calls may be messy, but programs could be simplified in such a way that they pass a single object or just a few objects. It may not be an ideal interface, but for many things like games, the speed increase is worth the "hassle" of dealing with JNI. One more thing: since the NDK r5, there's a way to write a fully native app on Android (no Java). That's what I hope
Source: Gamasutra