- 浏览: 908986 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
itzhongyuan:
java Random类详解 -
david_je:
你好,我看到你在C里面回调JAVA里面的方法是在native里 ...
Android NDK开发(1)----- Java与C互相调用实例详解 -
fykyx521:
请求锁是在 oncreate 释放实在ondestroy?? ...
Android如何保持程序一直运行 -
aduo_vip:
不错,总结得好!
Android读取assets目录下的资源 -
f839903061:
给的网址很给力哦!
Android 4.0.1 源码下载,编译和运行
1.
先把cocos2dx根目录中的
/Users/zhaoshun/cocos2dx/cocos2d-2.0-x-2.0.4/cocos2dx/platform/android 目录
拷贝到 xcode项目的
工程根目录/libs/cocos2dx/platform 目录下
2.
在xcode工程中
文件开头加入 预编译
。。。。。。代码
3.
在cocos2dx方法中 调用java方法
比如
函数的签名可以使用如下命令获取
4. JniHelper.h文件 讲解
此文件在 cocos2dx跟目录/cocos2dx/cocos2dx/platform/android/jni/JniHelper.h
内容
先把cocos2dx根目录中的
/Users/zhaoshun/cocos2dx/cocos2d-2.0-x-2.0.4/cocos2dx/platform/android 目录
拷贝到 xcode项目的
工程根目录/libs/cocos2dx/platform 目录下
2.
在xcode工程中
文件开头加入 预编译
//使用预编译,对当前平台为Android时才会导入如下头文件 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #include <android/log.h>
。。。。。。代码
#endif
3.
在cocos2dx方法中 调用java方法
比如
void HelloWorld::menuCloseCallback(CCObject* pSender) { ////静态函数示例1.无参数,无返回值 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V"); if (!isHave) { CCLog("jni:此函数不存在"); }else{ CCLog("jni:此函数存在"); //调用此函数 minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); } CCLog("jni-java函数执行完毕"); #endif }
函数的签名可以使用如下命令获取
javap -s 包名 类名 可以显示函数的签名 到bin的classes目录
4. JniHelper.h文件 讲解
此文件在 cocos2dx跟目录/cocos2dx/cocos2dx/platform/android/jni/JniHelper.h
内容
#ifndef __ANDROID_JNI_HELPER_H__ #define __ANDROID_JNI_HELPER_H__ #include <jni.h> #include <string> #include "platform/CCPlatformMacros.h" NS_CC_BEGIN typedef struct JniMethodInfo_ { JNIEnv * env; jclass classID; jmethodID methodID; } JniMethodInfo; class CC_DLL JniHelper { public: static JavaVM* getJavaVM(); static void setJavaVM(JavaVM *javaVM); static const char* getExternalAssetPath(); static void setExternalAssetPath(const char* externalAssetPath); static jclass getClassID(const char *className, JNIEnv *env=0); static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode); static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode); static std::string jstring2string(jstring str); private: static JavaVM *m_psJavaVM; static std::string m_externalAssetPath; }; NS_CC_END #endif // __ANDROID_JNI_HELPER_H__
// 静态函数示例1.无参数,无返回值 public static void testFun() { Log.e("Himi", "静态函数示例1.无参数,无返回值"); } // 静态函数示例2.有参数,无返回值 public static void testFunWithInt(int _int) { Log.e("Himi", "静态函数示例1.有参数,无返回值;传入的参数int=" + _int); } // 静态函数示例3.有参数,有返回值 public static int testFunWithIntAndRtn(int _int) { Log.e("Himi", "静态函数示例1.有参数,有返回值;传入的参数int=" + _int); return _int+1000; } // 静态函数示例4.有参数,有返回值(String类型) public static String testFunWithStringAndRtn(int _int) { Log.e("Himi", "静态函数示例4.有参数,有返回值(String类型);int=" + _int); return "yes,return 'String' is OK --by Himi"; } //---- 函数示例之非静态函数调用 //(先获取个对象) public static Activity actInstance;//定义单例 public static Object rtnActivity() { return actInstance; } //使用此对象进行调用非静态函数 public void nostaticFun() { Log.e("Himi", "no static Function is OK - By Himi"); }
////静态函数示例1.无参数,无返回值 //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 // JniMethodInfo minfo;//定义Jni函数信息结构体 // //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 // bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V"); // // if (!isHave) { // CCLog("jni:此函数不存在"); // }else{ // CCLog("jni:此函数存在"); // //调用此函数 // minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); // } // CCLog("jni-java函数执行完毕"); //#endif ////静态函数示例2.有参数,无返回值 //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 // JniMethodInfo minfo;//定义Jni函数信息结构体 // //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 // bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithInt", "(I)V"); // // if (!isHave) { // CCLog("jni:此函数不存在"); // }else{ // CCLog("jni:此函数存在"); // //调用此函数 第三个参数为 传入的值 // minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,888); // } // CCLog("jni-java函数执行完毕"); //#endif // //静态函数示例3.有参数,有返回值--------------------------------$$$$$$$-------------------------------- //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 // JniMethodInfo minfo;//定义Jni函数信息结构体 // //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 // // bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithIntAndRtn","(I)I"); // jint _int; // if (!isHave) { // CCLog("jni:此函数不存在"); // }else{ // CCLog("jni:此函数存在"); // //调用此函数 // _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,823); // // //尝试jint是否能正常接收返回的int值 // JniMethodInfo minfo_ty; // bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/example/testGame/testGame", "testFunWithInt", "(I)V"); // if (isHave) { // minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int); // } // // } // CCLog("jni-java函数执行完毕"); //#endif //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 // JniMethodInfo minfo;//定义Jni函数信息结构体 // //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 // bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/example/testGame/testGame","testFunWithStringAndRtn","(I)Ljava/lang/String;"); // jobject jobj; // if (!isHave) { // CCLog("jni:此函数不存在"); // }else{ // CCLog("jni:此函数存在"); // //调用此函数 // jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823); // } // CCLog("jni-java函数执行完毕"); //#endif //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 // JniMethodInfo minfo;//定义Jni函数信息结构体 // //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 // bool isHave = JniHelper::getStaticMethodInfo(minfo, // "com/example/testGame/testGame", //类的路径 // "rtnActivity", //方法名 // "()Ljava/lang/Object;"); //括号里的是参数,后面的是返回值。 // jobject jobj; // if (isHave) { // jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); // } // CCLog("正确获取到 jobj"); // // // // isHave = JniHelper::getMethodInfo(minfo, // "com/example/testGame/testGame", //类的路径 // "nostaticFun", //方法名 // "()V"); //括号里的是参数,后面的是返回值。 // // if (isHave) { // minfo.env->CallVoidMethod(jobj, minfo.methodID); // } // CCLog("jni-java函数执行完毕"); //#endif
发表评论
-
Android使用binder访问service的方式
2013-08-23 09:42 15591. 我们先来看一个与本地service通信的例子。 pub ... -
android-Service和Thread的区别
2013-08-23 09:17 876servie是系统的组件,它由系统进程托管(servicema ... -
git介绍
2013-08-01 14:49 972git介绍 使用Git的第一件事就是设置你的名字和email ... -
cocos2d-x学习之自动内存管理和常见宏
2013-07-29 15:41 8701.自动内存管理 1)概述 C++语言默认是 ... -
cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
2013-07-29 10:35 1063第一个改动: CCLayer初始化 自定义Layer,类名 ... -
xcode与eclipse整合cocos2dx
2013-07-29 10:32 1184文档xcode版本是 204 1. 在xcode中创建coc ... -
git提交代码
2013-07-23 16:00 10021. 在本地创建一个Git的工作空间,在里面创建一个工程(如H ... -
Java中HashMap遍历的两种方式
2013-07-23 13:58 955转]Java中HashMap遍历的两种方式 原文地址: htt ... -
Android.mk的用法和基础
2013-07-19 14:11 4285一个Android.mk file用来向编译系统描述你的源代码 ... -
eclipse配置NDK-Builder命令
2013-07-18 11:02 9821. 2. -
eclipse配置javah命令
2013-07-18 10:48 19561.找到javah命令所在的目录 我的为 /usr/bi ... -
Android SDL2.0 编译
2013-07-17 13:40 19221,下载: wget http://www.libsdl.o ... -
GCC 编译使用动态链接库和静态链接库
2013-07-16 21:28 14171 库的分类 根据链接时期的不同,库又有静态库和动态库之分。 ... -
在mac下编写ffmpeg项目
2013-07-15 21:32 9451.建立工程TestFFmpeg 2.编写c文件 mian. ... -
使用低版本gcc/g++
2013-06-08 14:22 1186解决方法为有两个 第一个方法: 上下载对应版本的.deb文件 ... -
IntelliJ Idea 常用快捷键列表
2013-05-27 10:19 0Alt+回车 导入包,自动修 ... -
android应用后台安装
2013-05-21 12:02 924android应用后台安装,静默安装的代码实现方法 http ... -
编译linux内核映像
2013-05-21 11:33 921a)准备交叉编译工具链 android代码树中有一个pr ... -
如何单独编译Android源代码中的模块
2013-05-21 11:29 945一. 首先在Android源代码 ... -
Ubuntu安装JDK6和JDK5
2013-05-19 19:04 960sudo apt-get install sun-java6- ...
相关推荐
cocos2d-x xcode 魔塔 mota 可运行
xcode cocos2d开发集成工具包,在xcode开发工具中添加cocos2d模块
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
Cocos2d-Java是基于Cocos2d-X,使用Java语言来开发Cocos2d跨平台游戏的引擎, 和-lua,-js 的api风格相近,方便快捷,便于习惯Java的开发者开发跨平台游戏;
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门
该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...
cocos2d-x魔塔源码Xcode版 绝对能编译通过
第1章 开始前的准备工作 1 第2章 你的第一款iPhone游戏:垂直射击游戏 38 第3章 Cocos2D核心类 69 第4章 Cocos2D中的动作、特效与动画 152 第5章 Cocos2D中的文本渲染系统 229 共19章
书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...
cocos2d-x 3.x版本,为xcode提供的自动集成安装的应用程序,直接点击安装即可。
cocos2d-x-2.1.5
iOS Game Programming with Xcode and Cocos2d(完整版) 自己收集的
本文档介绍了cocos2d的基本函数和一些基本概念
cocos2d 官方 手册 iPhone 下载 非常好的一本学习cocos2d 的手册
继续输入cd Cocos2d-iPhone-0.99.5(cd Cocos2d-iPhone-0.99.5为解压的cocos2d文件夹名称)进入cocos2d文件夹中。 4。继续输入./install-templates.sh则打开你文件夹下面的install-templates.sh进行cocos2d的安装。...
引擎版本:cocos2d-js-v3.6.1 js代码开发工具:Cocos Code IDE 1.2.0 xcode版本:Xcode-6.3.1 MAC:OS XYosemite 10.10.2 == 该游戏已经成功通过AppStore的审核上线并开始获得广告收入! == 除了源码之外,还附带...
cocos2d-x中文显示 cocos2d-x v2.2.0
windows环境,一款很好用cocos2d粒子特效编辑器,里面有不少例子
Ray Wenderlich的《Cocos2d SimpleGame》,被认为是cocos2d的初学者最好的教程,这本书被Cocos2D-X团队从objective-c转化到了c++版,并发布在了github上。在此感谢Ray Wenderlich的慷慨相助。 源代码是在cocos2d-x ...