您的位置:首页 > 移动开发 > Cocos引擎

Android Cocos2d-X JNI的应用(一)

2015-01-27 16:02 239 查看
我们在用2dx开发Android项目的时候会有很多 C++与Java需要交互数据的地方

首先来看一下2dx的 platform/android/jni/ 下的JniHelper类 :

这是最常调用的方法之一:

形参理解(方法信息,Java端被调用的类名,Java端被调用方法名,传递的参数类型+返回的参数类型)

static bool getStaticMethodInfo(JniMethodInfo &methodinfo,
const char *className,
const char *methodName,
const char *paramCode);
void jniTest()
{

JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t,
"org/cocos2dx/cpp/AppActivity",
"jniTest",
"()V"))
{
t.env->CallStaticVoidMethod(t.classID,t.methodID);
t.env->DeleteLocalRef(t.classID);
return;
}
}
这里要注意
getStaticMethodInfo
方法的常用的第四个参数书写方式:

()V代表参数类型都为void

()Z代表传递的参数类型为void 返回类型为bool

()I 代表传递的参数类型为void 返回类型为int

(I)Ljava/lang/String;代表传递的参数类型为int 返回类型为String(这里要格外注意: 分号一定不要忘记)

如果用到返回String类型的数据时  就要用到String转char*的方法了

/*******************************************************************************
* Function Name  : jstringTostr
* Description    : String 转换成 Char*
* Input          : String
* Output         : Char*
* Return         : Char*
*******************************************************************************/
static char* jstringTostr(JNIEnv* env, jstring jstr)
{
char* pStr = NULL;
jclass jstrObj = env->FindClass("java/lang/String");
jstring encode = env->NewStringUTF("utf-8");
jmethodID methodId = env->GetMethodID(jstrObj, "getBytes",
"(Ljava/lang/String;)[B");
jbyteArray byteArray = (jbyteArray) env->CallObjectMethod(jstr, methodId,
encode);
jsize strLen = env->GetArrayLength(byteArray);

jbyte *jBuf = env->GetByteArrayElements(byteArray, JNI_FALSE);
if (jBuf > 0) {
pStr = (char*) malloc(strLen + 1);
memset(pStr, 0x00, strLen + 1);
if (!pStr) {
return NULL;
}
memcpy(pStr, jBuf, strLen);
pStr[strLen] = 0;
}
env->ReleaseByteArrayElements(byteArray, jBuf, 0);
env->DeleteLocalRef(byteArray);
env->DeleteLocalRef(encode);
return pStr;
}


然后就是Android端 的接口方法了 

public static void jniTest() {
Log.e("AppActivityTag", "jniTest  In Java");
}
注意 
getStaticMethodInfo
这里用的是调用Static方法,Android端就要相应的用 Static方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x Android JNI