JNI - como usar várias instâncias do wrapper Jni com campos diferentes?

fundo

Eu tenho um projeto android que usa JNI (usando NDK) para codificar em Java e C / C + +.

Eu criei um wrapper java Jni no lado java que fará todas as operações JNI sozinho, enquanto nenhuma outra classe java pode acessar as operações jni diretamente além desse wrapper.

o problema

problema é, eu desejo criar várias instâncias deste wrapper, enquanto a parte Jni deve ter uma instância por wrapper Jni.

isso é um problema, já que a parte Jni mantém os mesmos campos para todas as instâncias.

a questão

Como posso resolver esse problema, para que, para cada instância de java do wrapper jni, haja uma instância na parte jni?

Eu estava pensando, talvez eu pudesse colocar todos os campos em uma classe C ++, e ter uma função init () que retornasse uma nova instância para o CTOR do JniWrapper e, a partir de então, para cada função JNI que precisa de campos , ele terá essa classe como um parâmetro. talvez pudesse ser um ponteiro como mostrado naesse link.

infelizmente, eu não tenho ideia de como fazer isso.

Alguém por favor pode ajudar?

amostra

aqui está um código de exemplo que espero que torne as coisas mais claras para aqueles que não entenderam o problema:

parte java:

public class JniWrapper
  {
  static
    {
    System.loadLibrary("JniTest");
    }

  private native void foo(Bitmap bitmap);
  }

parte jni:

...
// sadly, all of those fields are actually a global fields
int _intField;
float _floatField;    
//those are just sample fields. i would also like to store pointers and objects...

JNIEXPORT void JNICALL ...foo(JNIEnv * env, jobject obj, jobject bitmap)
  {
  // do something with the fields, as if they all belong to the JniWrapper, 
  // and no other instances of JniWrapper are allowed to change them
  }

questionAnswers(2)

yourAnswerToTheQuestion