拇指接龙游戏从WIN32向Android移植过程问题记录(1)

简介:

本文将较细致地记录下最近开发课程中的示例游戏-拇指接龙游戏在从WIN32向Android移植过程中遇到的若干问题及相应解决办法。


  目前极不完整,待进一步整理。


问题2


连接真机测试运行时,在SplashScreen运行时便出现如下错误提示(log.txt):

09-16 13:28:16.525: I/GLThread(25784): sending render notification tid=10
09-16 13:28:18.530: D/cocos2d-x debug info(25784): cocos2d: removeAction: Target not found
09-16 13:28:18.530: D/cocos2d-x debug info(25784): cocos2d: removeAction: Target not found
09-16 13:28:19.520: D/cocos2d-x debug info(25784): Get data from file(armature/ButterflyArmature_01.ExportJson) failed!
09-16 13:28:19.520: D/cocos2d-x debug info(25784): GetParseError Text only contains white space(s)
09-16 13:28:19.520: D/cocos2d-x debug info(25784): Assert failed: CCAnimationData not exist! 

09-16 13:28:19.520: E/cocos2d-x assert(25784): F:/Games2014/ThumbelinaCell/projects/ThumbelinaCell/proj.android/../../../extensions/CocoStudio/Armature/CCArmature.cpp function:init line:151
09-16 13:28:19.520: E/cocos2d-x assert(25784): F:/Games2014/ThumbelinaCell/projects/ThumbelinaCell/proj.android/../../../extensions/CocoStudio/Armature/CCArmature.cpp function:init line:157


date: 2014-9-19  为了忘却的纪念

=================

  上面加这两天同时进行WIN32向ANDROID与IOS的移植,感觉问题真不少!其一,微软的C++编译器与苹果的G++严谨程度很不一样:当然是前者松,而后者紧。

其二,CocoStudio(或者现在的Cocos Studio)开发小组这一块(我估计)问题也不少。我估计,无论直接安装CocoStudio还是下载较新一些的Cocos2d-x,其中Extension那一块很可能都是CocoStudio开发小组提供的。


  就拿上面的问题来说,文件名与文件路径大小写问题!我分析了部分Extension代码,发现不少地方比较字符串时区分大小写。他们编码中直接使用这样的语句:

   if(str.compare("json")==0 || str.compare("ExportJson")==0){......}


  刚才关闭了VS,也懒得打开了,反正就是类似于上面方式!可怕吧!!!!!!!!!!!!!


  因为现在还没有彻底通过,所以还不能够全面总结教训。一句话:无论是ANDROID,还是IOS,很可能你前期都是在WIN32下编码与调试;那么,在涉及到资源文件命名时最好全面使用小写(虽然使用firstFunc不安全而使用firstfunc又容易写错,那么干脆使用first_func吧),当然也包括在创建CocoStudio相关的各种资源文件命名时;否则,你会浪费大量时间在这些东西上!


    进一步补充(2014-9-21):因为Android与iOS本质上就是Unix,所以其路径名与文件名均区别大小写--从而也理解上面直接使用compare进行区分大小写的比较。因此,只要你有绝对把握控制完全的大小写一致,即在各种(设计时与编译时)情况下都一致,那么你可以尽情地命名文件与路径。切记!切记!

  上面错误的原因,就是因为上述类似操作导致的。


问题1


    先上错误图,如下:

wKiom1QbyBzD-QTEAAMjJRrNQCI822.jpg



  问题1与问题2顺序并没有颠倒!前面问题1记录的是在cygwin下使用如下命令后,再转移到ANDROID下编译运行时出现的错误。

1
2
cd  /cygdrive/f/Games2014/ThumbelinaCell/projects/ThumbelinaCell/proj .android
. /build_native .sh

  其作用是调用NDK编译生成.o库文件(最关键部分,把C/C++代码编译链接生成为JAVA所调用的库文件);此库文件再为JAVA代码所调用。


  其实,在高版本的NDK下(我使用的是NDK R8E),已经不再需要cygwin这个类linux控制台环境(安装这个cygwin太浪费时间了,记得十多年前安装过一次,主要是为学习gcc,那时倒轻松;可以与当时国外网站访问方便有重大关系吧)。也就是说,只要安装好ADT,并配置好NDK编译路径,直接在Eclipse环境下编译链接便OK了。

  

   之所以列出这里的“问题1”截图,正是为了说明这一点。即以后,我们不再留恋cygwin这个老朋友了(还真有点舍他不得......)。



   而且,上面是第一次在Eclipse下使用NDKR8E编译拇指接龙对应的Android工程得到的错误提示。注意:我使用的是CocoStudio 1.4.0.1(其内集成了cocos2d-x 2.2.3)。


   解决上述截图错误的办法如下:


      根据上述错误提示,我打开文件MainScene.h,发现了如下(我自己都有些惊奇了!--这是我不小心使用VS提供的自动化生成方法功能导致的)

1
2
3
4
5
     //menu callback
     void  MainScene::onToolbarHandler(CCObject *pSender, TouchEventType type);
     void  MainScene::onPauseHandler(CCObject *pSender, TouchEventType type);
     void  MainScene::onGUI2Handler(CCObject *pSender, TouchEventType type);
     void  MainScene::onBonusContinueHandler(CCObject *pSender, TouchEventType type);

  抓紧修改,把那些MainScene::全都去掉。借问一句:使用什么软件打开这个.h文件最好呢?使用VS?太慢了?使用EditPlus?凑合吧!但是,根据我最近修改经验,使用EditPlus修改居然不成功(此前我还比较迷信这个工具),只好使用VS。但是,比EditPlus更好用的要当NotePad++(在家中刚刚下载了最新的6.6.9,好用!)当然,批量把.cpp/.h文件修改为UTF-8等功能,此前我还都借助于EditPlus。


  修改后,继续运行“Project-Build Project”命令。


问题3

  

  继续干活,继续出错!不好,又出现下面一句:


jni/../../Classes/MainScene/MainScene.cpp:7:17: fatal error: vld.h: No such file or directory
compilation terminated.


  不好,vld.h文件怎么能够打包呢!赶快使用NotePad++注释掉!可能还有很多vld.h引用没有注释掉吧,还是使用VS一下全部找出来处理算了!



问题4


jni/../../Classes/TutorialUI/TutorialScene.cpp:668:41: error: request for member 'c_str' in '"Continue"', which is of non-class type 'char const [9]'
jni/../../Classes/TutorialUI/TutorialScene.cpp:722:41: error: request for member 'c_str' in '"Continue"', which is of non-class type 'char const [9]'


错误代码如下:

1
guidLabelText->setText( "Continue" .c_str());

修改为:

1
guidLabelText->setText( "Continue" );

看起来,VC++就是不太严谨!!!


问题5


过一会儿,又出现如下错误:

ake: *** [obj/local/armeabi/objs/cocos_extension_static/GUI/CCControlExtension/CCControlSaturationBrightnessPicker.o] Error 126
make: Leaving directory `/cygdrive/f/Games2014/ThumbelinaCell/projects/ThumbelinaCell/proj.android'
make: *** Deleting file `obj/local/armeabi/objs/cocos_extension_static/GUI/CCControlExtension/CCControlSaturationBrightnessPicker.o'

**** Build Finished ****


从字面上来看,是CCControlSaturationBrightnessPicker.cpp文件中出现了错误。还好,我没有使用这些功能!接下来看,它自动删除了。但是,直接退出,不再干活了!

  没有办法,我再次编译吧。又开始干活了...


问题6


过一会儿,又出现如下错误:

wKiom1Qb3mbhZAyUAAGDVLK09mc122.jpg


出现上述“undefined reference to...”错误的原因比较复杂,其实最常见的是没有提供函数实现体(或者按默认编译顺序找不到)。在我的情况下,家中的版本老些了(现在编译的是办公些新添加了商店模块后的版本),所以修改一下android.mk,把上述缺乏的文件添加进行即可。


问题7


接下来,要等待30分钟左右。总体感觉,在cygwin下与在Eclipse下操作速度相关不大,约需要近50分钟。在办公室配置的i3, 4核,4G内存台式机上估计至多20分钟即可完成。

目前没有问题了---初始成功生成库文件libThumbelinaShared.so!


接下来,要进行到艰难的UI运行级调试了。当然,也是在Eclipse下运行程序,然后逐渐调试......















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1553218,如需转载请自行联系原作者



相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
103 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
2天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
19天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
21天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
21天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
23 1
Android开发之使用OpenGL实现翻书动画
|
21天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
18 1
Android开发之OpenGL的画笔工具GL10