拇指接龙游戏从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,如需转载请自行联系原作者



相关文章
|
15天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
16 1
|
17天前
|
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配置以确保顺利运行。
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
18天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
5天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
8天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
9天前
|
监控 Java Android开发
安卓应用开发:打造高效用户界面的五大策略
【4月更文挑战第29天】 在安卓应用开发的世界中,构建一个既美观又高效的用户界面(UI)对于吸引和保留用户至关重要。本文将深入探讨五种策略,这些策略可以帮助开发者优化安卓应用的UI性能。我们将从布局优化讲起,逐步过渡到绘制优化、内存管理、异步处理以及最终的用户交互细节调整。通过这些实践技巧,你将能够为用户提供流畅而直观的体验,确保你的应用在竞争激烈的市场中脱颖而出。
|
1天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
11 1
|
1天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
9 0
|
2天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
7 2
|
2天前
|
机器学习/深度学习 算法 Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第6天】 在现代移动应用的海洋中,用户经常面临信息过载的挑战。一个精心设计的通知管理系统对于提升用户体验至关重要。本文将探讨在安卓平台上如何实现一个高效的通知管理系统,包括最佳实践、系统架构设计以及性能优化技巧。通过分析安卓通知渠道和优先级设置,我们的目标是帮助开发者构建出既能吸引用户注意,又不会引发干扰的智能通知系统。
16 2