title: How to expose a native enum to Java through JNI?
body: <p>I am importing headers from an existing project for a port to Android-NDK.  In a few cases, there are enums defined in the native headers which I would like to use from the Java layer.  How can one go about doing that?</p>
  
  <p>Ideally, I'd like to just expose the constants to the Java layer somehow, but I don't see a way to do that.</p>
  
  <p>The most obvious possibility is to doubly-define the enums in both Java and C++.  However, the existing headers a) have no explicit numbering, b) have elements which are #ifdef'ed, and c) are shared with existing projects through SVN Externals.  Therefore, doubly-defining the enums seems substantially more brittle than even the typical case.</p>
  
  <p>The next idea is to use some build-time code-gen to create the enum in Java based on the pre-processed header -- possibly just as integer constants rather than a Java enum?</p>
  
  <p>The third and most-nebulous idea I have is to define the enum in Java, pass those objects to the JNI glue, and have it compare against the some invocation of FindClass(), GetStaticFieldID(), and GetStaticObjectField(); then have the JNI glue re-map those to the native enum.  That all seems inefficient, though.</p>
  
  <p>Suggestions?</p>