我正在做一個將使用C++庫的android應用程序。出於這個原因,我需要使用Android-NDK構建C++項目。但是我現在面臨的問題是如何使用JNI調用C++靜態函數。如何使用JNI爲android調用C++靜態函數
在我的C++代碼中,我有一個單例類。我們都知道要實現一個單例類,我們需要引入靜態函數,它負責創建這個類的一個實例。現在我需要的是使用JNI調用靜態函數來創建一個可以用於我的android應用程序的實例。
我正在做一個將使用C++庫的android應用程序。出於這個原因,我需要使用Android-NDK構建C++項目。但是我現在面臨的問題是如何使用JNI調用C++靜態函數。如何使用JNI爲android調用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();
}
在Singleton類:
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();
}
假設我的單例類有一個成員函數名稱Create()。因此,要調用Create()函數,我需要按以下方式調用。 'bool Java_mypackage_com_useSingletonSomehow(long singleton) { return(MySingleton *)singleton-> Create(); } ' – dipanjan
是的。 JNI函數必須是C函數,但您肯定可以從中調用任何C++代碼。 –
這裏有什麼問題嗎? JNI C++方法可以調用靜態C++方法。你是否試圖將整個單例對象傳遞給Java? –
是的。我如何將單例對象傳遞給Java? – dipanjan
實際上我需要的是使用單例對象到android來訪問單例類成員函數。謝謝。 – dipanjan