我正在做一个将使用 C++ 库的 android 应用程序。出于这个原因,我需要使用 Android-NDK 构建 C++ 项目。但我现在面临的问题是如何使用 JNI 调用 C++ 静态函数。
在我的 C++ 代码中,我有一个单例类。众所周知,要实现一个单例类,我们需要引入负责创建此类实例的静态函数。现在我需要使用 JNI 调用静态函数来创建一个可以在我的 android 应用程序中使用的实例。
我正在做一个将使用 C++ 库的 android 应用程序。出于这个原因,我需要使用 Android-NDK 构建 C++ 项目。但我现在面临的问题是如何使用 JNI 调用 C++ 静态函数。
在我的 C++ 代码中,我有一个单例类。众所周知,要实现一个单例类,我们需要引入负责创建此类实例的静态函数。现在我需要使用 JNI 调用静态函数来创建一个可以在我的 android 应用程序中使用的实例。
你可以在 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();
}