前两篇介绍了cocos2d-x 下linux开发环境配置和android 环境配置问题。在这其中遇到很多问题,所以最后一篇分享一下在处理这些问题时,我是如何解决的,是怎么想的。同时总结一些解决这类问题的方式。避免少走弯路。首先通过问题列表的形式来回答一下部署遇到的基本问题。
一、问答列表
1、ubuntu下不能识别手机问题
    这是因为android sdk 中 platform-tools下大adb没有权限访问设备的信息,所以在设备管理器中显示一堆乱码,解决这个问题的方式就是通过su权限去关闭和开启服务。但是一定要注意两次操作都要用sudo,才可以。adb的目录为: sdk/platform-tools/  下,如果你不知道我说的那个sdk的话请移步这篇文章。执行命令为:
sudo ./adb kill-server
sudo ./adb start-server
2、NDK_ROOT 查找不到问题,ADB not responding
    这两个问题其实是一个问题,NDK_ROOT 需要配置在~/.bashrc下。这个就是相当于windows下大user path,配置在这里,每个用户都可以访问到这个变量。是否配置好了需要通过echo $NDK_ROOT验证,若果正确打印出来,说明配置没有问题。但我在运行工程目录下的bulid_native.sh时,始终提示在找不到NDK目录下的
make程序,但是cd到对应目录是可以找到的。到这里令人非常郁闷,就先抛下这个问题。继续查找ADB not responding 的问题,后来找到了问题的关键(https://developer.android.com/sdk/installing/index.html)。原来我是64的系统,所以必须安装一个包。安装好后一切都正常了。包括NDK_ROOT的问题,估计在没安装这个包的时候,是系统找不到正确版本的make程序。安装ia32-libs的命令如下:
apt-get install ia32-libs
3、程序如何识别编译环境问题
    其实这个问题已经困扰我很久,只不过没有遇到这个问题前一直没有深究,在加载eclipse linux项目的时候我选择的编译器是cross gcc,系统默认的。就没有过多注意。结果悲剧就来了。引擎始终识别不了平台类型。问了好友小胖同学,小胖告诉我代码里判断平台代码。其实就是知其所然,不知其所以然。通过看源代码,发现引擎是通过查找系统CC_TARGET_PLATFORM。而这个值是通过编译器来查找的。所以必须选择linux
gcc,才会CC_TARGET_PLATFORM = LINUX。这也是检测平台很好的方法。
4、引用lib问题
     在android工程里需要包含lib文件,其实就是通过ndk将cocos2d的几个库打包成了java可以调用的库。这个容易理解,可以直接把包含lib文件的工程导入进来,也可以直接将生成的lib文件拷贝到自己的lib库文件夹里就可以了。
5、引用头文件问题
     这个问题比较简单,只不过是cocos2d-x自己的目录结构不够好而已。本来 引用coscos2dx根目录就可以了,但是由于cocos2d.h放在根目录的include文件下。要知道编译器在编译阶段根据是<>和""分别去系统目录查找头文件和当前目录查找头文件,如果有目录包含也是以当前目录去查找。后来想了想,也许cocos2dx的目的是不要包含根目录,而是去根目录查找。只要包含cocos2dx所在目录就可以了。从cocos2dx在inlcude所在的目录就明白了。
6、模拟器问题
      模拟器其实问题不大,要注意android sdk的版本,如果和模拟器的版本对不上,就会报错。同时模拟器出现异常,重启是个好方法。因为模拟器这东西不能对其期望太高。何况真机android平台各种假死,异常屡见不鲜。如果配置的模拟器不能满足需求,不要重新编辑保存,而是直接删除重建。因为我编辑保存后,在运行游戏的时候还是报异常,后来在stackoverflow 找到这种问题的处理办法就是删除模拟器,新建模拟器。
二、最终的思考
     通过这一系类的折腾,部署好了环境。现在看我在这写文章很轻松,其实我自己在处理这些问题并不轻松。所以我在想为啥会遇到这些问题?如何避免这种问题发生。因为在之前很多的开源项目,在我部署的时候也是问题重重。
     1、linux 并不是大众平台,从一个好用的输入法就可以看出来。要知道这些商业公司,对mac os开发了很多好用的日常软件,但没有linux的。更是说明了,商人都是围绕利益出发的,这是核心。就如三体里面的宇宙丛林法则。不管说的多么好,法则是不会变的。
     2、互联网的资料存在太多的噪音,这也是我不爱看电子书的原因,很多电子书都包含大量的错误,大脑里装了太多错误的知识,在你选择的时候,它们就发挥作用了。用女朋友的话说,就是烟囱口上招手,往黑道上引啊。
     3、对自己所用的平台并没有认真的分析。网上好多资料都是32位系统的,包括android sdk 并没有区分操作系统的架构体系。所以需要装补丁。在下载android sdk的时候其实说明页面是有提到64位ubuntu系统问题的。但可恶的是折叠了这部分东西。
     4、对编译器,操作系统理解的不够深刻。比如说上面提到的cocos2dx是如何判断平台的,大家都知道引擎可以自己判断,那到底如何判断的呢?其实对编译器熟悉的话,都知道不同的编译器会定义自己的符号,通过检测编译符号就知道是什么平台。
     5、并没有将自己的已知的知识很好的应用,其实对于相对路径,系统查找文件的方式,都很清楚,但遇到问题的时候还是怀疑这些,这就像化学反应中,要控制住不变量,才能得到实验结果。但是自己内心一乱,把这些正确的东西也改的不对了,增加了正确方向的可变因子。做人也一样,要确认自己的优势,以及能力。这样才能做到比较正确的抉择。可变因子变少了,意味着干扰因素少了。成功的概率就提高了。
三、参考资料

ubuntu下搭建cocos2dx编程环境-下的更多相关文章

  1. ubuntu下搭建cocos2dx编程环境-中

        上篇文章里讲了在ubuntu下部署cocos2d-x开发环境,这篇文章主要示范在ubuntu下部署cocos2d-x android开发环境.分开写就是因为我看很多文章里都将这两件事情混杂着写 ...

  2. ubuntu下搭建cocos2dx编程环境-上

        这大半年一直在开发flash游戏,用到的编程语言是actionscript和c++.所以这次公司决定开发手游端的话,C++不是很生疏,这是个好消息.坏消息是由于现在网页游戏还没有上线,所以公司 ...

  3. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  4. ubuntu下搭建gtk+编程环境

    首先gtk+项目主页为: http://www.gtk.org/ gtk+现在有2和3两种版本,使用 sudo apt-get install gnome-core-devel 可以一次性安装2个版本 ...

  5. 在windows下搭建汇编编程环境

    汇编语言程序搭建masm+debug 下载链接 dosbox:链接:https://pan.baidu.com/s/1TgkfU-d5w6Nz9TOYro1pYw 密码:mp83 masm:链接:ht ...

  6. mac 下搭建php 编程环境全过程

    1,打开终端, 设置root密码sudo passwd root输入密码 2, 安装 apachemac 自带apache 启动apachectl start重新启动apachectl restart ...

  7. ubuntu 中 搭建 C编程环境

    在 ubuntu 中 使用 快捷键 Ctrl + Alt + T 打开 终端 在终端输入 gcc 查看 有没有安装 gcc (c语言的编译器) ( 我这里是 已经 安装 好的 ) 进行 安装 gcc ...

  8. Ubuntu 12.04下搭建Qt开发环境

    http://download.qt.io/official_releases/qt/ Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04) 1.配置基础开发环境G ...

  9. Ubuntu系统下搭建Python开发环境

    之前演示了在Windows中安装Pycharm,很简单.下面介绍一下如何在Ubuntu中安装Pycharm 1.更新Python至3.5.1,执行以下命令: sudo add-apt-reposito ...

随机推荐

  1. 给Eclipse提速的7个技巧(转)

    本文由 ImportNew - 孙 波翔 翻译自 nicolasbize.欢迎加入翻译小组.转载请参见文章末尾的要求. 大约一个月前,我发表了一篇博客,其中介绍了对Eclipse的爱与恨. 有些人问我 ...

  2. [shell基础]——数组

    数组赋值 1. 逐个数组元素赋值 # array[0]=11 # array[1]=22 # array[2]=33 # echo ${array[@]} 11 22 33 33 2. array( ...

  3. copy-mutableCopy

    copy和mutableCopy语法的目的:改变副本的时候,不会影响到源对象:调用Copy产生的对象是不可变的,调用mutableCopy产生的对象是可变的,与调用对象是否可变无关. Copy 需要先 ...

  4. angularjs resources

    http://tutorials.jenkov.com/angularjs/watch-digest-apply.html http://angular-tips.com/blog/2013/08/w ...

  5. AUTH过程

    INITIALIZE UPDATE: 在安全通道的显式发起期间,INITIALIZEUPDATE命令用于在卡和主机之间传送卡和会话数据.这个命令开始一个安全通道会话的发起. CPURESET() // ...

  6. 字符串流sstream[part2/使用同一个字符串流反复读写数据]

    stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议:    1:调用clear ...

  7. hibernate 超级牛x的公共类

    想法,能支持in查询和 =查询的 公共方法,类似下面实现 用 泛型 实现 参数 getList(String[] params,Object[] values){} for(int i=0;i< ...

  8. Careercup - Microsoft面试题 - 6282862240202752

    2014-05-11 03:56 题目链接 原题: Given an integer array. Perform circular right shift by n. Give the best s ...

  9. union与union all的区别

    首先说下union与join的区别 1.union是以行增加的方式,进行连接:join是以列增加的方式进行连接: 2.union连接查询的两个表的字段必须要一一对应,数目相等:join则没有要求,但是 ...

  10. 【转】Basic C# OOP Concept

    This Article will explain a very simple way to understand the basic C# OOP Concept Download ShanuBas ...