Я делаю приложение для Android, которое будет использовать библиотеку C ++. По этой причине мне нужно собрать проект C ++ с использованием Android-NDK. Но проблема, с которой я сейчас сталкиваюсь, заключается в том, как вызывать статическую функцию C ++ с использованием JNI.
В моем коде 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();
}
Других решений пока нет …