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 回答