cocos2d-xライブラリを使った小さなプロジェクトがあります。C ++を使用してJava関数を呼び出そうとしていますが、次の行でシグナル11の例外が発生します。
// Get Status
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
しかし、なぜこれが起こっているのかわかりません。
私のJavaクラスGetsocial.javaには、次の関数があります。
プライベートボイドツイート() {{ 文字列スコア="123"; String tweetUrl = "https://twitter.com/intent/tweet?text=Hello!Android用のmygameで"+スコア+"ポイントを獲得しました!!!!"; Uri uri = Uri.parse(tweetUrl); startActivity(new Intent(Intent.ACTION_VIEW、uri)); }
この関数は、ナビゲーターを起動してツイートを投稿します。Javaからの呼び出しは正常に機能します。
私のC++InterfaceJNI.hには、次のものがあります。
#ifndef __INTERFACE_JNI_H__ #define __INTERFACE_JNI_H__ #include "cocos2d.h" クラスInterfaceJNI {{ 公衆: static void postMessageToFB(); static void postMessageToTweet(); 保護: }; #endif // __INTERFACE_JNI_H__
そしてInterfaceJNI.cppで:
#include "InterfaceJNI.h" #include "platform / android / jni / JniHelper.h" #include jni.h> #include android / log.h> 名前空間cocos2dを使用します。 void InterfaceJNI :: postMessageToTweet() {{ intステータス; JNIEnv * env; JavaVM * jvm; jmethodID mid; jclass mClass; bool isAttached = false; CCLog( "静的postMessageToTweet"); //ステータスを取得 status = jvm-> GetEnv((void **)&env、JNI_VERSION_1_6); CCLog( "ステータス:%d"、ステータス); if(status AttachCurrentThread(&env、NULL); CCLog( "ステータス2:%d"、ステータス); if(status GetStaticMethodID(mClass、 "tweet"、 "()V"); CCLog( "mID:%d"、mid); if(mid!= 0) env-> CallStaticVoidMethod(mClass、mid); // ------------------------------------------------ ----------- CCLog( "終了"); if(isAttached) jvm-> DetachCurrentThread(); 戻る; }
このインターフェースは、以下を使用してコードの一部から呼び出されます。
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) InterfaceJNI :: postMessageToTweet(); #elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS) ObjCCalls :: trySendATweet(); #endif
jvm-> GetEnv((void **)&env、JNI_VERSION_1_6);でnullポインタを返すために何が起こっているのか ?