cocos2dx3.3 android工程 Jni调用java函数

本文详细介绍了一种在Cocos2d-x项目中实现C++调用Java的方法。具体步骤包括创建Cocos2d-x工程、实现Java类、编写JNI调用代码等,并通过实例演示了如何从C++中调用Java的静态方法。

工作上要接入移动MM的SDK,但是对C++和JAVA的相互调用一点都不了解,自己动手实践一下,先做C++调用JAVA函数的功能,下篇再写JAVA调用C++函数的功能。
网上搜了下觉得这篇文章很好,
http://www.himigame.com/iphone-cocos2dx/725.html

  • 1.创建cocos2d-x工程
  • 2.eclipse导入刚创建工程的proj.android工程
  • 3.新建java 类,实现两个输出提示的函数show1/show2。
  • 4.新建jnitojava.cpp文件,其中getTips()函数实现JNI调用第3步在java中实现的函数show1.
  • 5.在cocos2dx工程中的调用函数getTips()。

1 ……

2 ……

3.新建java 类,实现两个输出提示的函数show1/show2。

在eclipse工程下,src文件夹,右键点击org.cocos2dx.cpp包->new->class
输入类名javaShow 点击 finish.
在src/org.cocos2dx.cpp/下会有一个javaShow.java文件,双击编辑 代码如下:
javaShow.java

package org.cocos2dx.cpp;

public class JavaShow {

   public static JavaShow test = null;  
   public static Object getInstance(){  
       if (test == null){  
           test = new JavaShow();  
       }  
       return test;  
   }  

   public static void show1(){  
       System.out.println("CALLED: javashow::show1");   
   }  

   public static void show2(String name){  
       System.out.println("CALLED: javashow:show2: " + name);  
   }  

}

实现了两个函数show1 和show2

4.新建jnitojava.cpp文件,其中getTips()函数实现JNI调用第3步在java中实现的函数show1.

新建两个文件,头文件jnitojava.h、实现文件jnitojava.cpp. 放在目录proj.android\jni\hellocpp下。
jnitojava.h代码如下:

#ifndef __JniToJava_H_
#define __JniToJava_H_
extern "C"
{
    void getTips();
    void getTips2(const char* name);
}
#endif

jnitojava.cpp代码如下:


#include "jnitojava.h"
#include "cocos2d.h"
#include "platform\android\jni/JniHelper.h"
#include <jni.h>
#define CLASS_NAME "org/cocos2dx/cpp/JavaShow"

using namespace cocos2d;
extern "C"
{
    void getTips()//c++通过jni调用java函数show1
    {
        JniMethodInfo jinfo;
        if(JniHelper::getStaticMethodInfo(jinfo,CLASS_NAME,"show1","()V"))
        {
            jinfo.env->CallStaticVoidMethod(jinfo.classID,jinfo.methodID);
        }
    }
    void getTips2(const char* name)//c++通过jni调用java函数show2
    {
        JniMethodInfo jinfo;
        if(JniHelper::getStaticMethodInfo(jinfo,CLASS_NAME,"show2","(Ljava/lang/String;)V"))
        {
            jstring jname = jinfo.env->NewStringUTF(name);
            jinfo.env->CallStaticVoidMethod(jinfo.classID,jinfo.methodID,jname);
        }
    }
}

5.在cocos2dx工程中的调用函数。

新创建的工程,helloworld.cpp头部加入

#include "HelloWorldScene.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#include "../proj.android/jni/hellocpp/jnitojava.h"
#endif

修改按钮返回函数


#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    getTips();//调用函数,函数里通过jni调用java函数 
    getTips2("printf this string");
#endif

eclipse->run as ->android application 连接真机运行

出来一个经典的hello world界面,每点击一次右下角的关闭按钮,eclipse的logcat窗口就会打印
CALLED: javashow::show1
CALLED: javashow:show2: printf this string

C++调用JAVA完成
明天再了解下JAVA调用C++

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值