cocos2d-x 编译 Anroid版本遇到的问题以及解决办法

发布时间:2016-12-6 16:09:29 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"cocos2d-x 编译 Anroid版本遇到的问题以及解决办法",主要涉及到cocos2d-x 编译 Anroid版本遇到的问题以及解决办法方面的内容,对于cocos2d-x 编译 Anroid版本遇到的问题以及解决办法感兴趣的同学可以参考一下。

这几天都在苦逼的编译程序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 中每个Module加上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, 哎,先将就着用吧。

上一篇:javascript setTimeout方法的使用
下一篇:通过Guice 进行依赖项注入

相关文章

相关评论