❶ cocos2d-x 3.8 编译 android 问题,版主能帮忙解决下吗
这几天都在苦逼的编译程序Android版本,到昨天晚上终于能编译通过且正常运行,现在把这几天遇到的问题和大家分享一下:
一 无法替换cocos2d-x本身自带的libxml2
为什么需要自己编译libxml2:
由于我以前解析xml使用的是Tree的方式,在Win32以及GMO上能够正常运行,但是在ndk下编译的时候遇到问题了,原来cocos2d-x使用的libxml2把Tree的解析方式关闭了。于是乎摆在我面前的是两条路,第一条是重新编译一版libxml2,打开Tree的解析方式;第二条是修改以前的代码,采用SAX的解析方式。由于修改代码的工作量比较大,所以决定先采用第一个方案。(PS:推荐大家在以后的程序中解析xml使用SAX的方式,省很多内存)
编译时遇到的问题:
先将libxml2源代码(从Android 2.2的源代码中拷贝出来的,稍作修改)拷贝到cocos2d-x根目录,然后修改yourgame/android/jni/Android.mk, 修改如下
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \ # this is the new add content
cocos2dx \
CocosDenshion/android \
))
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \
cocos2dx \
CocosDenshion/android \ ))
然后将cocos2dx\platform\third_party\android\libraries\libxml2.a删除,再修改yourgame和cocos2d-x使用的新的libxml2的头文件目录,最后编译。然后果断的悲剧了,libxml2的代码不会被编译,然后在链接cocos2d-x so的时候会提示link error (libxml2的接口找不到实现)。
解决办法:
修改cocos2d-x的Makefile文件,修改如下:
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/platform/third_party/android/libraries) \
-lGLESv1_CM -llog -lz \
-lpng \
-ljpeg \
# -lxml2 #delete the old style of link libxml2
LOCAL_STATIC_LIBRARIES := libxml2 # add to enable auto build of libxml2
yourgame 的makefile 的修改参考cocos2d-x。 哈哈,终于能正常编译了。
二 编译命令始终是compile++ thumb 或者 compilethumb
为什么不要使用thumb:
thumb指令集是为了满足一些低端的设备而加上的,使用的是16位的指令集,能压缩代码密度,但是指令比普通的32位arm指令弱很多,所以建议关闭掉。
解决办法:
在每个Android.mk 中每个Mole加上LOCAL_ARM_MODE := arm ,这样就能看到compile++ arm 和compile arm 了。
三 无法载入资源
问题描述:
在Android 程序编译完打包之后,安装上设备,提示"Get data from file **** failed", 但是发现文件路径是对的,只是中间有"."或者".."。
问题产生的原因:
在请教高人之后知道android程序中使用的资源是打包在压缩文件里面的,程序中只能通过在压缩包的全路径名去获取文件,并且不能有相对路径(如"." , "..")。而且,不能通过fopen去打开,因为文件目录根本就没有这个文件。
解决办法:
1. 将plist文件和png,动画配置xml和png放在相同的目录,plist和xml中包含的文件名和plist以及xml在相同的目录下。
2. 在解析xml的时候不能使用xmlReadFile,而使用如下方式:
const char* xmlConfFullPath = CCFileUtils::fullPathFromRelativePath(yourfilename);
CCFileData data(xmlConfFullPath, "rt");
unsigned long size = data.getSize();
char *pBuffer = (char*) data.getBuffer();
doc = xmlReadMemory(pBuffer, size, NULL, "UTF-8", XML_PARSE_RECOVER);
四 dynamic_cast不能使用
问题描述:
dynamic_cast返回NULL,但是在Win32上是能正常工作的。
原因:
不详,反正搞不定,试过以下各种办法,均以失败告终:
1. 修改Application.mk,添加如下:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
2. 修改编译器,使用gcc编译C+代码,且在链接时将-lsupc+ 换成-lstdc++
最后只能放大招:
将dynamic_cast 改为static_cast, 哎,先将就着用吧。
❷ android和cocos2dx可以互调吗
在cocos2dx里访问/互调android里的activity方法/变量
不得不感叹下COCOS2DX的强大。。同一份游戏代码不加改动的可以放到android和iphone上面。
而最近在往ANDROID上放的时候,需要集成其它非官方运营渠道的API,而对方提供的API是jar包。所以需要在cocos2dx C++源文件中调用java的API,因此有了以下DEMO代码:
activity里有如下定义:
Java代码
public void cppCall_nonStatic_logsth(){
//非静态方法
Log.i("cppCall_nonStatic", "test2~~~~!!!");
}
public static Object cppCall_logsth(){
//静态方法
Log.i("cppCall", "test~~~~!!!");
return activity;
}
AppDelegate.cpp里:
加上预定义(for android)
C++代码
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include <JniHelper.h>
#include <android/log.h>
#if 1
#define LOG_TAG "JniHelper"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#else
#define LOGD(...)
#endif
#endif
关键代码片段:
C++代码
JniMethodInfo minfo;
jobject jobj;
bool b = JniHelper::getStaticMethodInfo(minfo,
"com/loy/puzzles/Puzzles", //类路径
"cppCall_logsth", //静态方法名
"()Ljava/lang/Object;"); //括号里的是参数,后面的是返回值。
if (!b) {
LOGD("JniHelper::getStaticMethodInfo error...");
}else{
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
}
JniHelper::getMethodInfo(minfo,
"com/loy/puzzles/Puzzles",
"cppCall_nonStatic_logsth",
"()V");
if(!b){
LOGD("JniHelper::getMethodInfo error...");
}else{
LOGD("ready to invoke method...");
minfo.env->CallVoidMethod(jobj, minfo.methodID);
}
最终LOGCAT打印日志如下:
12-29 12:46:33.891: D/JniHelper(2008): testing~~~
12-29 12:46:33.891: I/cppCall(2008): test~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): ready to invoke method...
12-29 12:46:33.891: I/cppCall_nonStatic(2008): test2~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): testing over~~~
即表示调用成功。
❸ cocos2dx怎么编译到android
如果你用的是windows系统作为开发环境,使用的是cocos2d-x3.2最新版的,你在一开始安装cocos2d-x的时候,会要求输入
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT
最新版的cocos2d-x使用了python来进行安装和编译程序的,所以你要先在你的windows系统上安装上python.安装好之后,下载最新版的cocos2d-x,然后,cd到这个目录下,你会看到一个有一个setup.py的文件,.py后缀的文件就是python的脚本文件了。是要用python来运行的。如果你安装好python之后设置好了python的环境变量,这个时候,你只要在命令行里运行:
python setup.py就可以了。
然后你就可以看到要求你输入的这三个路径了。
这三个工具的所在路径,这几个路径输入对了之后,你的cocos2d-x就安装好了,这个时候,在cmd里创建一个新项目,创建的方法是在命令行里输入:
cocos new youprojectname -p com.youcom,youprojectname -l cpp -d 你的新建项目所在路径
然后回车,你就可以看你的的项目会在你的新建项目路径下有一个youprojectname的文件夹,打开,你就可以看到里边有各个系统的project文件夹了,还有一个Class和Resources的文件夹。这个时候,你在命令行里cd到你的proj.android文件夹下,使用命令:
python bulid_native.py
就可以对你的安卓新建的helloworld项目进行编译了。不出意外,要不然一分钟就编译好了。会生成一个libcocos2dcpp.so在你的pro.android/libs/armabi的路径下。然后打开你的ADT,也就是eclipse,进入pro.android目录,导入android项目到eclipse。这个时候可能会报一个cocos2d-x的lib库错误,只要把cocos2d-x的
cocos2d/cocos/platform/android/java/src
目录下的文件夹复制到pro.android/src下就可以解决这个问题了。
然后,接上你的android手机,并且在手机中打开开发者模式。点击程序远行设置,选择使用设备运行。在弹出的一个选择手机设备的框时选择run,不一会,你的helloworld项目就可以在手机上看到了。
如果要调试,你可以在eclipse中打开logcat,看到cocos2d-x的log输出信息。
总的来说,android最好的开发环境还是mac系统。因为在mac系统下很多linux命令都可以使用。不像windows系统比较蹩脚。
❹ android 怎么调用cocos2dx的方法
cocos2d-x在win32平台上开发出来的代码还需要交叉编译后才能生成android可以使用的包,具体操作见这个文档 另:使用cocos2d-x引擎的优势在于便于移植性。其开发出的C++代码只要在各平台上只要稍加改动就可以使用。
❺ cocos2dx3.2编译android的.so报错
NDK_MODULE_PATH没定义
❻ 新手,cocos2dx移植到android平台不知道怎么导入sqlite3库
创建windows平台项目 一、 搭建windows开发环境 官网上显示cocos2d-x支持win7、winxp、vista系统但我只在win7上用过以下说明均是在win7系统上的编译器使用vs2010。
1、 安装vs2010 2、 安装Visual Assist X可选
3、 执行build-win32.bat编译cocos2d-x
4、 运行cocos2d-x根目录下的install-templates-msvc.bat将cocos2d-x模板加入vs模板库。
5、将.\Debug.win32目录下的所有dll文件拷贝至Windows\system32\ (iconv.dll libcocos2d.dll libcocosDenshion.dll libcuri.dll libEGL.dll libgles_cm.dll libxml.dll pthreadVCE2.dll zlib1.dll )6、 双击cocos2d-win32.vc2010.sln进入vs编译环境
二、 新建win32项目
1、在“解决方案”上单击右键选择“添加”-〉“新建项目”。
2、选择“左侧Cocos2d-x模板”在右侧列表中选择“Cocos2d-win32 Application”输入项目名称“Cocos2dDemo”点“确定”。
3、在弹出的对话框中点击“下一步”。
4、如果需要使用Box2D引擎则选中否则不要选。点击“finish”创建成功。
三、 编译运行
1、右键Cocos2dDemo项目选择“生成”进行编译。
2、右键Cocos2dDemo项目选择“设为启动项目”。然后F5或者点击菜单栏的运行键 运行。
四、 创建新的解决方案 新建项目有两种方式一是直接在cocos2d-x解决方案中添加新项目上面已经介绍过了。当你刚开始接触cocos2d-x还在尝试写demo时用这种方式可以快捷的创建demo而且方便查看例子中的代码。
另一种方式是创建一个新的解决方案方法如下
1、“文件”-〉“新建”-〉“项目”
2、进入新建项目的窗口选择“左侧Cocos2d-x模板”在右侧列表中选择“Cocos2d-win32 Application”输入项目名称“Cocos2dDemo”点“确定”。然后执行“下一步”。
3、使用Box2D引擎则选中否则不要选。点击“finish”创建成功。
4、单击左下角的属性标签或者选择“视图”-〉“属性管理器”打开属性管理器
5、在属性管理器中双击“Microsoft.Cpp.Win32.user”弹出属性页在里面设置VC++目录即可。这样该设置对所有VC项目都有效见下图。
6、在“包含目录”中, 加入下列项目 (D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32)
7、在“库目录”中, 加入下列项目(D:\adroid\cocos2d-2.0x-2.0.3\Debug.win32)(发布时用release目录下的!!)
8、上面的第4、5、6、7条
也可以通过如下方法解决: 定位到%USERPROFILE%\appdata\local\microsoft\msbuild\v4.0可以通过运行或直接在windows资源管理器的地址栏中输入使用其他文本编辑工具修改Microsoft.Cpp.Win32.user.props或Microsoft.Cpp.X64.user.props文件中的相关字段。以下是我的文件内容 <IncludePath>D:\android\cocos2d-2.0-x-2.0.3;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32\OGLES;D:\android\cocos2d-2.0-x-2.0.3\external\Box2D;D:\android\cocos2d-2.0-x-2.0.3\CocosDenshion\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\kazmath\include;$(IncludePath)</IncludePath><LibraryPath>D:\android\cocos2d-2.0-x-2.0.3\Debug.win32;$(LibraryPath)</LibraryPath> 第4至8条的作用是加入解决方案所依赖的头文件和库文件以保证项目的正常编译运行。
五、 如何删除vs里的cocos2d-x模板
1、 打开如下目录 (Example as default install) 1VS2008: C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects\ 2VC2008Express: C:\Program Files\Microsoft Visual Studio 9.0\VC\Express\VCProjects 3VS2010: C:\Program Files\Microsoft Visual Studio 10.0\VC\vcprojects\ 4VC2010Express: C:\Program Files\Microsoft Visual Studio 10.0\VC\Express\VCProjects
2、 删除此目录下的 Cocos2d-x文件夹 3、 删除前缀为 CCAppWiz (0.8.0 or later) 或 CCXAppWiz (0.7.2 or earlier)的文件
将项目由win32移植到android平台
一、 快速搭建android开发环境
1、将服务器上的eclipse、java、android sdk、android ndk、cygwin、cocos2d-x文件夹拷贝到本地请注意保存的路径为英文、不包含空格、且不要过长。
2、 运行eclipse添加android-sdk的路径。(preferences->Android:SDK Location)
3、 添加ADT(Help->Install New Software:Work with)
4、添加java环境变量。 新建变量JAVA_HOME变量值为java目录的绝对路径。 在path中添加 %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\bin; %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\jre\bin; D:\android\Java\jre6\bin;
5、运行一次Cygwin.bat
6、修改\cygwin\home\用户名\.bash_profile文件添加NDK_ROOT=/cygdrive/d/android/android-ndk-r8b export NDK_ROOT
7、 修改\cocos2d-2.0-x-2.0.3\create-android-project.bat中的如下路径 set _CYGBIN=e:\cygwin\bin set _ANDROIDTOOLS=e:\android\android-sdk\tools set _NDKROOT=e:\android\android-ndk-r8
二、 新建android项目
1、 运行create-android-project.bat创建新的android项目例如项目名称为Cocos2dDemo。
2、 将win32下完成的.cpp和.h文件拷贝到\Cocos2dDemo\Classes
3、将win32下使用的资源拷贝到\Cocos2dDemo\proj.android\assets
4、将cpp文件的路径、使用的头文件的目录加入到Android.mk文件。
5、打开Cygwincd 到/Cocos2dDemo/proj.android目录下
6、执行./build_native.sh进行编译
7、在eclipse中编译打包。
三、 补充
1、2.0以上版本的引擎基本无法在android模拟器上运行建议在xcode和vs上调试好直接在真机上运行。
2、2.0以上版本的引擎要求android的开发和运行环境都要2.2以上的sdk。
将项目由win32移植到ios 一、 创建ios项目
1、 安装XCode
2、执行install-templates-msvc.bat将模板添加到XCode
3、打开xcode选择Create a new Xcode project选择cocos2d-x模版
4、点击next填入项目名称Man
5、找到Man的主项目在这里新建一个iOS文件夹。点击create创建完成
6、删除Resource和Classes下的多余文件Helloworld的代码和资源
7、右键点击Resource 选择Add Files to "Man"... 7、将Man主项目文件夹下的Resource文件夹中的资源添加到当前工程。注意选择create folder references for any added folders只是添加一个引用
8、同样的方法添加源文件和头文件到Classes下
9、点击Run编译运行
二、 补充
1、Mac 平台的OS X需要10.6及以上版本
2、IOS平台需要4.0及以上版本
3、IOS真机支持iPad 1、iPad 2、iPad 3、 iPhone 3GS、iPhone 4、iPhone 4S、iPhone 5、iphone6、iPod Touch 3 and iPod Touch 4 不支持iPhone and iPhone 3G。
❼ android cocos2d x 怎么创建地图
对于这一教程,你需要安装最新的Cocos2D-X版本(游戏邦注:在写本篇教程的时候更新到2.1.4)。如果你还未拥有最新版本的Cocos2D-X,先下载它并在终端运行如下命令去安装模版:
cd ~/Downloads/cocos2d-x-2.1.4 ./install-templates-xcode.sh -f -u 然后使用iOScocos2d-xcocos2dx模版在Xcode创造一个新项目。点击Next,将项目命名为TileGame,将项目设置为Universal,点击Next然后点击Create。
你将在这一项目中使用ARC,所以如果这是你第一次听到ARC,我会鼓励你先了解下它。模版并不是默认使用ARC,但幸运的是,我们能够轻松地进行 修改。前往EditRefactorConvert to Objective-C ARC。往下拉并只选择文件main.m, AppDelegate.cpp, HelloWorldScene.cpp,然后点击Check并完成向导的步骤。
select targets(from raywenderlich)
创建并运行,然后确保一切都还正常运行—-你应该能够看到标准的“你好世界”屏幕。
接下来下载游戏资源的压缩文件。压缩文件包含如下内容:
你将面向玩家对象使用的精灵。
一些伴随着cfxr效用所创造的音效(你将会在教程中用到)。
一些伴随着Garage Band所创造的背景音乐。
你将用到的一些砖块设置—-这将伴随着你将使用的地图编辑器,但我认为我们能够更轻松地将其与其它内容包含在一起。
一些额外的“特别”砖块,将在之后进行详细解释。
当你下载了资源后,打开它并将TileGameResources文件夹拖到项目的Resources群组中。在项目菜单里,右击 Resources群组,并选择Add Files to “TileGame”…选择Resources/TileGameResources文件夹,核实选中了Copy items into destination group’s folder (if needed)以及Create groups for any added folders,然后点击完成。
如果一切顺利的画,所有的文件都将出现在你的项目中。
tile game(from raywenderlich)
现在我们将开始创造地图!
创造地图
Cocos2D-X支持基于开放源Tiled Map Editor去创造地图并将其以TMX格式进行保存。
下载Tiled Map Editor。在编写本篇教程的时候,其最新版本是0.9.0。
然后运行Tiled,前往FileNew,并如下填写对话内容:
new tileset(from raywenderlich)
为了获得图像,点击Browse并导航至你自己的TileGame/Resources/TileGameResources文件夹,然后选择你之前从资源压缩中下载的tmw_desert_spacing.png文件,并将其添加到项目中。它将自动根据文件名填写名字。
你可以将宽度和高度设置为32×32,因为这也是砖块的大小。对于边缘和间隔:
边缘是关于在Tiled开始寻找真正的砖块像素前应该为当前的砖块略过多少多少像素(包括宽度和高度)。
间隔是关于Tiled在明确了实际砖块像素并转向下一个砖块数据之后应该前进多少像素(包括宽度和高度)。
如果你着眼于tmw_desert_spacing.png,你将发现每个砖块都围绕着一个1像素的黑色边缘,这也解释了边缘和间隔为1的设置。
tile(from raywenderlich)
当你点击OK时,你将看到砖块呈现在Tilesets窗口中。现在你可以开始绘制了。点击工具栏的Stamp
Brush图标,然后点击地图上的任何一个位置去放置一个砖块。
tileset(from raywenderlich)
所以继续绘制地图—-尽可能发挥创造性!确保添加至少一些建筑到地图上,因为你在之后将需要一些碰撞内容。
tileset(from raywenderlich)
为了更轻松地绘制内容,你可以着眼于一些快捷方法。以下是最常用到的一些方法:
你可以在Tileset选择器中围绕着一系列砖块拖曳一个盒子,并同时放下多个相邻的砖块。
你可以通过Viewoom In和Viewoom Out进行放大和缩小。
z键将在基于Stamp Brush工具编辑地图时进行旋转。
在一些新功能中你可能会注意到Mini-map。这是一个很棒的功能,它让你能够看到一个迷你地图!着眼于我在Mini-map最下方的迷宫中的糟糕尝试。红色盒子代表你在主要编辑窗口中看到的区域。
tileset(from raywenderlich)
当你在阅读下一个区域中的滚动时牢牢记住这一Mini-map视图。
需要注意的是这一教程的资源是出现在地图前的——所以如果你很懒的话便可以直接利用它。如果你这么做,你应该在Tiled打开地图并明确它是如何设置的。
当你完成地图的绘制时,在Layers视图中双击Tile
Layer,将名字改为Background。然后点击FileSave,并将文件保存到TileGame项目中的TileGame
ResourcesTileGameResources,将文件命名为TileMap.tmx,并覆盖现有的文件。
你将在之后使用Tiled做其它事,但是现在让我们将这一地图带进游戏中!
添加Tiled地图到Cocos2D-X场景中
打开HelloWorldScene.h,在#include “cocos2d.h”之后添加如下内容:
usingnamespacecocos2d;
这能指导编辑器去使用cocos2d命名空间,所以你不需要为所有内容加上cocos2d的前缀。
然后添加以下内容到类定义中,即在花括号之后:
private:CCTMXTiledMap*_tileMap;CCTMXLayer*_background;
这创造了一个实例变量去追踪砖块地图本身,并创造了另一个实例变量去追踪地图的背景层。你将在之后学到更多有关砖块地图层面的内容。
接下来,用如下内容换掉HelloWorldScene.cpp:
CCTMXObjectGroup*objectGroup=_tileMap->objectGroupNamed(“Objects”);if(objectGroup==NULL){CCLog(“”);returnfalse;}CCDictionary*spawnPoint=objectGroup->objectNamed(“SpawnPoint”);intx=((CCString)*spawnPoint->valueForKey(“x”)).intValue();inty=((CCString)*spawnPoint->valueForKey(“y”)).intValue();_player=newCCSprite();_player->initWithFile(“Player.png”);_player->setPosition(ccp(x,y));this->addChild(_player);this->setViewPointCenter(_player->getPosition());
最后一行有个预兆——但不要担心,你很快就能到达那里。
让我们暂停一会并解释对象层面和对象群组。首先注意你是通过在CCTMXTiledMap对象中(而不是layerNamed)通过objectGroupNamed方法检索对象层面。它返回了一个特殊的CCTMXObjectGroup对象。
然后objectGroup调用了objectNamed方法去获得一个CCDictionary,并包含了一些有关对象的有用信息,如x和y轴,宽度和高度。在教程的这一部分,你需要关心的便是x和y轴,将其设置为玩家精灵的位置。
在代码块的最后你设置了视图去明确玩家的位置。所以现在添加如下内容到HelloWorldScene.h中:
//(CCPointposition);
并添加一个新方法到HelloWorldScene.cpp(在文件的最下方最好):
voidHelloWorld::setViewPointCenter(CCPointposition){CCSizewinSize=CCDirector::sharedDirector()->getWinSize();intx=MAX(position.x,winSize.width/2);inty=MAX(position.y,winSize.height/2);x=MIN(x,(_tileMap->getMapSize().width*this->_tileMap->getTileSize().width)–winSize.width/2);y=MIN(y,(_tileMap->getMapSize().height*_tileMap->getTileSize().height)–winSize.height/2);CCPointactualPosition=ccp(x,y);CCPointcenterOfView=ccp(winSize.width/2,winSize.height/2);CCPointviewPoint=ccpSub(centerOfView,actualPosition);this->setPosition(viewPoint);}
这是关于砖块的解释。想象这一函数设置了摄像机的中心位置。它让用户能够进入地图中x,y轴的任何位置—-但是你有可能不想呈现出某些点,如你可能不想要屏幕超过地图的边缘(那么它便只会呈现出黑边!)。
❽ 如何win32上cocos2dx发布安卓apk流程
首先在exclipe上配置好java的jdk1.6或更高,配置好android环境(最好有android2.1或2.2以及更高版本的sdk)。 在下载个ndk,ndk解压后先放到一边,cygwin,解压后,sygwin解压安装会比较久大概4-5个小时,如果解压安装成功, cygwin安装过程请参考http //wenku com/view/88b001ef4afe04a1b171de05.html看到第三步就行了,接下来继续看 安装好cygwin后验证下是否成功打入(注意空格)make -v ,gcc -v 没有出现意外的话就出现以下画面 表示你已经装好cygwin了,接下来是修改在安装cygwin目录下,如本人安装目录如下D:\cygwinx\home\Administrator 然后最好用UE编辑器点开.bash_profile,然后在最下面加上 (ndk路径以及cocos2dx路径即/cygdrive/你所在的盘的ndk路径如下) NDK_ROOT=/cygdrive/e/AndroidNDK/android-ndk-r8e export NDK_ROOT COCOS2DX_ROOT=/cygdrive/d/cocos2d-2.1beta3-x-2.1.1 export COCOS2DX_ROOT 然后就完成了大半了,再在D:\cocos2d-2.1beta3-x-2.1.1下点击 第一个填写的是包名称,一般填写***.***.***之类, 第二个是填写工程名,你根据需要定义咯 在最好选项是选择哪种android的sdk,最好使用经历低的版本(如2.1或2.2)比较好兼容。 然后生产出来时个简单的helloworld工程,如果是要将自己的工程装成android的,及将生成工程文件中的proj.android拷贝到自己的工程文件中,如下图 然后需要修改三个地方如 1)将proj.win32里面的.h以及.cpp文件拷贝到Classes中 (如果以后修改那些.cpp文件或.h文件需要继续从proj.win32拷贝到Classes中覆盖掉之前的文件再生成新的android工程) 2)进去proj.android\jni下面修改Android.mk, 将所有.cpp的路径都添加进去即可,如本人增加了下面那些路径, 3)用UE编辑器修改build_native.sh文件 在第三行下面加入,如下 NDK_ROOT=/cygdrive/E/AndroidNDK/android-ndk-r8e COCOS2DX_ROOT=/cygdrive/D/cocos2d-2.1beta3-x-2.1.1 GAME_ROOT=$COCOS2DX_ROOT/RussiaGame (注意RussiaGame是我cocos2dx的工程名) GAME_ANDROID_ROOT=$GAME_ROOT/proj.android RESOURCE_ROOT=$GAME_ROOT/Resources 好了 修改完这些保证每错误之后 打开cygwin,然后经过下面路径(以本人路径为参照) 到最后./build_native.sh之后没错误的话(这个过程比较久大概十几二十分钟,有些可能要半个钟头),它就能生产android项目了(成功的判断是看他是否生产.so文件) 成功的话在路径D:\cocos2d-2.1beta3-x-2.1.1\RussiaGame\proj.android\libs\armeabi下能看到libgame.so文件 然后接下来就可以生成可以在exclipe上运行的android工程了,导入D:\cocos2d-2.1beta3-x-2.1.1\RussiaGame\proj.android这个就可以在exclipe上看到该工程了 如果出现 如果一开始这个文件没有存在的话(我当时是一开始没有这个文件,当时很悲剧,常看了项目jdk是1.6的没问题,最后发现就是这个文件缺失造成的) 右键点击你的项目-》选择导入-》再点击browse-》(进入到你的项目所在的目录,进入cocos2dx->platform->android->java)然后就会出现那个文件了 以及有个libcocos2dx项目也有了(这个项目相当于类库不要删掉它),以后就不用重复上面这些导入了。 然后没有报错就说明成功啦,然后就可以在exclipe上进行真机运行啦(注意好像虚拟机运行一直会出现bug,我也一直没成功,所以建议真机运行吧,好像现在只能真机运行才行),然后就可以成功运行以及会在bin文件下回生成一个apk文件可以拷贝给大家玩啦,好开心的喔。。。。。 然后到现在这样就算是转android成功了, (悄悄说下 ,如果需要把项目在真机上弄成竖屏,及要在AndroidManifest.xml中改一改, android:screenOrientation="landscape"(横屏),android:screenOrientation="portrait"(竖屏),它默认为横屏),到现在好开心的,打了这么多,大家一起学习吧加油