一个JNI最简单示例。
(1)C++部分:
在HelloWorld.cpp增加如下函数,用于调用java代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include
"platform/android/jni/JniHelper.h"
#include <cocos2d.h>
#endif
void
HelloWorld::testJNI()
{
#
if
(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo minfo;
bool
isHave = JniHelper::getStaticMethodInfo(minfo,
"org/cocos2dx/cpp/AppActivity"
,
"testjni"
,
"()V"
);
if
(!isHave) {
log
(
"jni:testjni is null"
);
}
else
{
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
}
#endif
}
|
(2)Java部分:
在org.cocos2dx.cpp.Activity中增加如下函数,供C++调用。
1
2
3
|
public
static
void
testjni() {
System.out.println(
"From Java"
);
}
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, "com/john/test/HelloCocoStudio2", "ttt", "()Ljava/lang/String;"))
{
jstring jstr = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
std::string text = JniHelper::jstring2string(jstr);
//label->setString(text.c_str());
}
#endif