JNI - jak używać wielu instancji opakowujących Jni z różnymi polami?

tło

Mam projekt androida, który używa JNI (używając NDK) do kodowania zarówno w Javie, jak i C / C ++.

Stworzyłem opakowanie Jni java po stronie java, które samo wykona wszystkie operacje Jni, podczas gdy żadna inna klasa java nie ma dostępu do operacji jni bezpośrednio innych niż ten wrapper.

problem

Problem polega na tym, że chcę utworzyć wiele instancji tego opakowania, podczas gdy część Jni powinna mieć instancję na opakowanie Jni.

jest to problem, ponieważ część Jni zawiera te same pola dla wszystkich instancji.

pytanie

Jak mogę rozwiązać ten problem, aby dla każdej instancji java opakowania jni wystąpiła instancja w części jni?

Myślałem, może mógłbym umieścić wszystkie pola w klasie C ++ i mieć funkcję init (), która zwróci jej nową instancję dla CTOR JniWrappera i od tego momentu dla każdej funkcji JNI, która potrzebuje pól , otrzyma tę klasę jako parametr. może to być wskaźnik, jak pokazano naten link.

nie mam pojęcia, jak to zrobić.

czy ktoś może pomóc?

próba

Oto przykładowy kod, który mam nadzieję uczyni rzeczy bardziej zrozumiałymi dla tych, którzy nie zrozumieli problemu:

część java:

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

  private native void foo(Bitmap bitmap);
  }

część 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