簡體   English   中英

JNI函數導致Android應用崩潰

[英]JNI Function Causing Android App to Crash

我具有以下將事件發送到我的Java代碼的JNI函數。

void onIncrementAchievement(unsigned char _iArgumentCount, const void *_pArguments, void *_pUserData){
JNIEnv *pJNIEnv = GetJNIEnv();
if (pJNIEnv){

        if ( _pArguments && ( _iArgumentCount > 0 ) ){
                const S3DX::AIVariable *pVariables = (const S3DX::AIVariable *)_pArguments ;

                if(_iArgumentCount != 2)
                        LOGI("INCORRECT NUMBER OF PARAMETERS");
                else{
                        if(pVariables[0].GetType() == S3DX::AIVariable::eTypeString){
                                // CHANGE ME!
                                jclass pJNIActivityClass = pJNIEnv->FindClass ( "com/nurfacegames/testgame01/TestGame01" );

                                if(pJNIActivityClass == NULL)
                                        LOGI("jclass was null!?!");
                                else{
                                        jmethodID pJNIMethodID = pJNIEnv->GetStaticMethodID(pJNIActivityClass, "onIncrementAchievement", "(Ljava/lang/String;Ljava/lang/Integer;)V");

                                        if(pJNIMethodID == NULL)
                                                LOGI("jmethodID was null!?!?");
                                        else{
                                                //Create a new string
                                                jstring arg;
                                                arg = pJNIEnv->NewStringUTF(pVariables[0].GetStringValue());

                                                jint arg2 = pVariables[1].GetNumberValue();

                                                //Call the method and pass the string parameter along
                                                pJNIEnv->CallStaticVoidMethod(pJNIActivityClass, pJNIMethodID, arg, arg2);
                                                //Free the string
                                                pJNIEnv->DeleteLocalRef(arg);
                                        }
                                }
                        }
                }
        }
}
}

當我運行Android App時,它強制關閉,甚至在logcat中都沒有給出任何錯誤,並且當我使用Ant進行編譯時,沒有編譯錯誤。

我討厭發布這樣一個模糊的問題,但是如果有人知道我的JNI代碼有什么問題,請給我一個提示。 謝謝!

我認為存在問題(我一直在努力)的領域是:

 if(_iArgumentCount != 2)
                        LOGI("INCORRECT NUMBER OF PARAMETERS");
                else{

和本節:

jint arg2 = pVariables[1].GetNumberValue();

pJNIEnv->CallStaticVoidMethod(pJNIActivityClass, pJNIMethodID, arg, arg2);

謝謝!

好吧,據我所知,查看您的方法名稱void onIncrementAchievement ,這不是在本機部分中聲明您的方法的正確方法,應該是:

Java_com_example_yourpackagename_youractivityname_yourmethod(...)

另外,我想方法中的參數也是錯誤的,請查看本教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM