cocos2dx 适配Android,cocos2dx基础篇(2)——Win32移植到Android

本文详细介绍了如何将Cocos2D-X项目移植到Android平台,包括使用Eclipse和ADT集成开发环境,修改Android.mk文件,解决编译错误如‘bash’找不到、符号未解析等问题,并提供了针对各种错误的解决步骤和配置方法。

【安装工具】

JDK

Eclipse 或直接下一个 ADT集成开发工具

SDK

NDK9r

ADT

CDT

安装方法自行百度。

【正文】

1、由Cocos2D-X 和 VS2010 环境配置——1中提到的python方法,创建新项目。

然后将你开发好的win项目相应的文件Classes和Resources文件夹里的东西分别拷贝到刚创建的新项目中相应的Classes和assets文件夹中去。

2、使用Eclipse将新项目中的pro.android导入。

hCU5Cjhnbz6ohlmh.jpg

3、修改Android.mk

将你Classes里的cpp都包进来。

并且在 include $(BUILD_SHARED_LIBRARY) 下面添加如下两行:

$(call import-add-path, D:\Android\tools\cocos2d-x-2.2.3)

$(call import-add-path, D:\Android\tools\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt)

AA52GZpVe0LYBH9p.jpg

4、修改项目的参数

B9TWGyqCfHvYUNdt.jpg

5、下面是bash,如果你的ndk版本低于r8,那么就需要再下个cywin了。

X27zQBjIS64m5eUb.jpg

6、导入一些资源文件

D:\Android\tools\cocos2d-x-2.2.3\CocosDenshion\include

D:\Android\tools\cocos2d-x-2.2.3\cocos2dx\include

jA3r8cdB1Ow3sQRc.jpg

7、在C/C++ Build 中的 Environment 里 Add 一个变量。

NDK_MODULE_PATH

D:\Android\tools\cocos2d-x-2.2.3;D:\Android\tools\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt

dbl8qJeIHoaQ3l7i.jpg

8、然后就可以点击导航栏中的o6ZaneiaB4vxGRvf.jpg, 开始编译了。。。

f7lcq4qec3cpJOtA.jpg

9、编译完之后,项目的bin中就多了一个apk文件。这样一直就成功了。。。

L5A2c1nwTsrPiCGH.jpg

10、在手机上跑跑看。。。

m6YmePcUGEeZlmNf.jpg

【问题】

如下有几个配置过程中可能出现的错误。。。

Q1:Program "bash" not found in PATH

A1:D:\Android\tools\android-ndk-r9d\ndk-build.cmd

如果你的ndk版本低于r8,那么就需要下载cywin,具体过程自己百度。

Q2:The import org.cocos2dx.lib cannot be resolved

A2:没有引入相应的包。

Project Properties -> Java Build Path -> Source -> Link Source ->  "D:/Android/tools/cocos2d-x-2.2.3/cocos2dx/platform/android/java/src"

Q3:Symbol 'CocosDenshion' could not be resolved

A3:没有引入源文件的原因。

Project Properties -> C/C++ General -> Path and Symbols -> Includes -> GNU C++ -> Add -> "D:\Android\tools\cocos2d-x-2.2.3\CocosDenshion\include"

然后加下面两句话即可。

#include "SimpleAudioEngine.h"

using namespace CocosDenshion;

Q4:Type 'std::string' could not be resolved

A4:android本身是不支持C++的STL的,所以你需要加入一些C++的STL的库函数

详情见 错误5。

然后加上两句,就可以用了。

#include

using namespace std;

Q5:Invalid arguments ' Candidates are: void * memcpy(void *, const void *, ?)

A5:为何会有“?”呢。。。

查看原形extern void*  memcpy(void *, const void *, size_t);

错误提示中:Invalid arguments,意味着参数无效,很明显是size_t这个参数不被正常识别造成的。

源于此分析,那么凡是使用size_t类型参数的方法均会出现这个问题,例如:memset,memccpy,memchr,memcmp等。

解决方案:

右击项目工程properties -> C/C++ General -> Paths and Symbols ->

选择 "Includes" 标签的GNU C++。Add下面两个路径:

D:\Android\tools\android-ndk-r9d\platforms\android-19\arch-arm\usr\include

D:\Android\tools\android-ndk-r9d\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\lib\gcc\arm-linux-androideabi\4.8\include

如此,该问题可解。

备注说明:

还可在将以下两个头文件库添加到项目的include中:

里面有一些其他的C++头文件和STL的头文件。。。

D:\Android\tools\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include;

D:\Android\tools\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include;

Q6:*** Android NDK: Aborting.    .  Stop.

A6:修改项目的jni文件夹下的Android.mk。

在 include $(BUILD_SHARED_LIBRARY) 下面添加如下两个:

$(call import-add-path, D:\Android\tools\cocos2d-x-2.2.3)

$(call import-add-path, D:\Android\tools\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt)

Q7:The connection to adb is down, and a severe error has occured.

A7:cmd跳到sdk tools文件路径下;adb kill-server;然后再adb start-server;重启Eclipse。

Q8:Type 'xxxx' could not be resolved

A8:修改工程的indexer属性就OK了

8MEr89e8ZDIU2IeL.jpg

Q9:Unable to resolve target 'android-8'

A9:原因是没有android-8的SDK,打开Android项目中的project.properties,将target改成你电脑中拥有的SDK版本API。如我这里有API 10和API 19。那么将其改成android-10或android-19即可。

ziJXgirVcwQAedi9.jpg

Q*、其实其他的错误都和上面的错误很类似,有什么错,基本都是没有加头文件引起的。。。

欢迎大家提供其他的错误。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值