原文链接:http://www.cnblogs.com/hewei2012/p/3376616.html
前提条件:
1.操作的游戏工程和cocos2d_x游戏引擎是一个目录的
2.跟jni相关的C++代码文件放在proj.android\jni\hellocpp目录下,每加一个cpp文件,都需在proj.android\jni的Andriod.mk文件中添加:
LOCAL_SRC_FILES := hellocpp/main.cpp \ hellocpp/test.cpp \ <--为新添加的 ...
3.跟jni相关的java代码文件放在proj.android\src\jt\SwordsMen目录下
一、C++调用Andriod接口
extern "C" //因为jni将java代码转过来是c的,所以C++引用得加上 { void showExitPt(const char *title,char *msg); //showExitPt将调用Andriod工程中实现的方法 }
#include <jni.h> #include platform/android/jni/JniHelper.h" ... 表示proj.android\src\jt\SwordsMen\JniTestHelper.java的,在该文件里有showTipDialog的实现 #define CLASS_NAME "jt/SwordsMen/JniTestHelper"
//事实上,showExitPt一般都是跟showTipDialog同名的,这里为了区分,写成不一样 void showExitPt(char *msg)
{
JniMethodInfo t;
//getStaticMethodInfo判断是否在java中实现了名字showTipDialog的方法
//"(Ljava/lang/String;Ljava/lang/String;)V" 对该方法的一个描述,详见说明
if(JniHelper::getStaticMethodInfo(t,CLASS_NAME,showTipDialog",0); line-height:1.5!important">(Ljava/lang/String;Ljava/lang/String;)V"))
{
jstring jTitle = t.env->NewStringUTF(title);
jstring jMsg = t.env->NewStringUTF(msg);
//根据该方法的返回值调用对应的CallStaticxxxMethod方法,如CallStaticIntMethod
t.env->CallStaticVoidMethod(t.classID,t.methodID,jTitle,jMsg);
t.env->DeleteLocalRef(jTitle);
t.env->DeleteLocalRef(jMsg);
}
}
private static void showTipDialog(final String title,255); line-height:1.5!important">final String text) { Message msg = mHandler.obtainMessage(); msg.what = SwordsMen.SHOW_DIALOG; DialogMessage dm = new DialogMessage(); dm.title = title; dm.msg = text; msg.obj = dm; msg.sendToTarget(); }