现在的位置: 首页 > 综合 > 正文

cocos2d-x win32导成anroid工程大致流程,附小问题集锦

2013年10月11日 ⁄ 综合 ⁄ 共 2367字 ⁄ 字号 评论关闭

最新版本的会在项目里自动生成proj.android文件夹,里面有个README.md,看那个就可以了。


以下是cocos2d-2.0-x-2.0.4的


win32导成android大致流程:

一、准备步骤:

0、需要cygwin,android sdk, android ndk。安装路径无中文无空格。

1、cygwin/home/Administrator下的.bashrc_profile最后加上ndk的地址,大致如下:

#set Android Home
#use R9 version
NDK_ROOT=D:/ProgramFiles/android-ndk-r9
export NDK_ROOT
export PATH=${PATH}:${NDK_ROOT}

3、cocos2d-x主目录下的create-android-project.bat打开,把里面的cygwin、sdk、ndk路径设好。

set _CYGBIN=D:\ProgramFiles\cygwin\bin
set _ANDROIDTOOLS=D:\ProgramFiles\adt-bundle-windows-x86_64-20130729\sdk\tools
set _NDKROOT=D:\ProgramFiles\android-ndk-r9

二、开搞

0、假设用vs做的那个win32项目位置是XXX/,下面会有classes、resources、proj.win32这么几个文件夹;

1、cocos2d-x目录下用create-android-project.bat随便生成一个项目;

2、将步骤2生成项目里的proj.android复制到XXX/下;

3、将cocos2d-x下的cocos2dx、CocosDenshion、extensions复制到项目里,地址可以随便,在XXX/proj.android/build_native.sh里把COCOS2DX_ROOT设好你放的位置就行了。

4、把项目所需的所有cpp地址都写到XXX/proj.android/jni/Android.mk里的LOCAL_SRC_FILES 后面,就差不多下面这样:

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp \
		   ../../Classes/AboutGame.cpp \
		   ../../Classes/BaseScene.cpp \
		   ../../Classes/CCChessman.cpp \
		   ../../Classes/EnterGame.cpp \

5、打开cygwin,到XXX/proj.andoid目录下,运行build_native.sh,会自动编译。对了,装cygwin的时候不要忘了装make,devel->make。

6、打开eclipse,新建->project->Android Project forom Existing Code,找到XXX/proj.android导进来,会有两个project,其中一个是libcocos2dx。在另一个里导入libcocos2dx.jar(其实这步我记不清了),然后就可以运行了。

小问题集锦(不断遇到中):

cygwin编译时报错: format not a string literal and no format arguments

原因:g++版本在4以上,有点严格了,要求字符串必须是格式化的

解决方法:按照出错信息打开相应的cpp,在__android_log_print函数的最后一个参数前加上"%s"。比如:

__android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info",  buf);

改成=>

__android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", "%s",  buf);

有些文件一般头里会有个宏定义#define LOGD(...) __android_log_print 什么什么的,那直接改这个就行了,比如:

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,"SIMPLEAUDIOENGINE_OPENSL", __VA_ARGS__)

改成=>

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,"SIMPLEAUDIOENGINE_OPENSL","%s", __VA_ARGS__)

要改的文件有:

CocosDenshion\android\SimpleAudioEngine.cpp

CocosDenshion\android\opensl\OpenSLEngine.cpp

CocosDenshion\android\opensl\SimpleAudioEngineOpenSL.cpp

cocos2dx\platform\android\CCCommon.cpp

cocos2dx\platform\CCPlatformMacros.h (最新版本要改这个,查找到"CCLOG"那一块,在那些函数的最后项参数前(似乎都是##带头的)加上"%s",})

安卓虚拟机运行时提示emulator-arm.exe已停止工作:

原因:显卡支持性的关系。

解决方法:将虚拟机的hardware属性里的GPU-emulation改成yes。有的版本是在虚拟机的emulation Options里把Use host GPU打钩。

虚拟机上程序无法打开:

原因:不清楚,听说是模拟器不支持gles2.0。

解决方法:暂无解,只能去搞甄姬真机。

抱歉!评论已关闭.