2

C++ ライブラリを使用する Android アプリケーションを作成しています。このため、Android-NDK を使用して C++ プロジェクトをビルドする必要があります。しかし、私が今直面している問題は、JNI を使用して C++ の静的関数を呼び出す方法です。

私の C++ コードには、シングルトン クラスがあります。シングルトン クラスを実装することは誰もが知っているように、このクラスのインスタンスを作成する役割を担う静的関数を導入する必要があります。ここで必要なのは、JNI を使用して静的関数を呼び出して、Android アプリケーションで使用できるインスタンスを作成することです。

4

1 に答える 1

1

JNI側で実行できます。

long Java_mypackage_com_createSingleton(JNIEnv* env)
{
     return MySingleton::getInstance();
}

bool Java_mypackage_com_useSingletonSomehow(long singleton) 
{
      return (MySingleton*)singleton->someFunc();
}

シングルトンクラスの場合:

   MySingleton* getInstance() 
    {
      if(instance_ == NULL)
      {
          instance_ = new MySingleton();
      }
      return instance_;

    }

Java側:

package mypackage.com;

class SingletonUser
{
private long mSingletonInstance;

public SingletonUser() {
   mSingleton = createSingleton();
}

public boolean someFunc() {
   return useSingletonSomehow(mSingletonInstance);
}

private native boolean useSingletonSomehow(long instance);
private native long createSingleton();

}

于 2012-10-22T06:56:36.940 に答える