jni

来源:互联网 发布:telnet ip加端口不通 编辑:程序博客网 时间:2024/06/08 11:07

一个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
 
  voidHelloWorld::testJNI()
  {
  #if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
      JniMethodInfo minfo;
 
      boolisHave = 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
publicstatic 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



0 0
原创粉丝点击