That's some neat work! And a strange coincidence, because I was going to release the same kind of thing! I based mine off the stable 2.1.2 release.
Getting it to compile was pretty simple. Box2D uses a tidbit of the C++ STL here and there, which Android doesn't support, but those were easily replaced by C counterparts (<limits> for infinite floats, <algorithm> for one std::sort call, and one seemingly redundant <memory>). I had to add one <new> somewhere to let the compiler know about the existence of placement new.
Using the almighty and amazing SWIG, the wrapping was almost effortless. I didn't wrap everything yet, because I'm renaming everything to match Java conventions. b2World becomes World (in package org.box2d.android), b2_fixedBody becomes BodyType.FIXED_BODY, etcetera. As you can see, I'm going for an interface that integrates seamlessly with other Java code.
One thing I'm worried about is the callback interfaces like b2DebugDraw; SWIG directors refuse to compile on the NDK, so it will require some manual labour, probably similar to what you did.
I'm also adding some convenience methods to prevent unnecessary construction and destruction of b2Vec2 objects. For example, a World constructor that takes (float gravityX, float gravityY, bool doSleep). I didn't measure whether this matters for performance in the long run, but it does save typing in many cases
And in a crippled language without operator overloading, b2Vec2 isn't all that useful anyway.
Since you appear to have taken largely the same approach, I think there's little point in me polishing my code for release anymore. If anyone is interested anyway, let me know!