C++调用java
1.在jni文件中添加一个helloworld/test.cpp(.h)文件 并且在jni中 android.mk中添加对应的路径
2.在对应的cocos2d-x文件中包含此文件 如:"../android/jni/helloworld/test.h"
3.在test.h声明一个方法:
#ifndef TEST_H #define TEST_H extern "C" { void sendEmailFunction(const char * index); } #endif
对应的cpp文件中
void sendEmailFunction(const char * index) { JniMethodInfo t; if(JniHelper::getStaticMethodInfo(t, "com/newtest2/jniHelper", "GetInfo", "(Ljava/lang/String;)V")) { jstring jIndex = t.env->NewStringUTF(index); t.env->CallStaticVoidMethod(t.classID, t.methodID,jIndex); t.env->DeleteLocalRef(jIndex); } }
注释:com/newtest2 是包的名字 jniHelper是对应的java文件 GetInfo是对应的方法 (Ljava/lang/String;)V传递一个String参数
4.在对应的jniHelper.java文件中代码如下
private static Handler mhandler; public static void init(Handler m) { jniHelper.mhandler=m; } private static void GetInfo(String info) { Message msg = mhandler.obtainMessage(); msg.what =newtest2.NUMBER; msg.sendToTarget(); }
注释:此方法需为static方法
Handler是关键
5.在起始java文件(newtest2.java)中调用jniHelper中的方法 代码如下
public final static int NUMBER=0x0001; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); jniHelper.init(mhandler); } private Handler mhandler=new Handler() { @Override public void handleMessage(Message msg) { switch(msg.what) { case newtest2.NUMBER: sendEmail(); break; } } }