cocos2d-x 2.2 android环境搭建(不用cygwin)

来源:互联网 发布:java报表工具 开源 编辑:程序博客网 时间:2024/05/29 07:31
      cocos2d-x的android环境搭建对于新手绝对称得上噩梦一般的存在。安装过程中吊诡的问题一个接着一个出现,坑爹的Eclipse错误提示的莫名其妙,对你丝毫没有任何帮助。网上的教程虽然侃侃而谈,但对100%出现的问题都避而不谈。这使得第一次安装android环境尤如星矢他们闯十二宫一样的痛苦,必须有坚韧不拔的毅力百折不挠的决心才能将这些问题一一解决。整个过程极其痛苦,没有星矢等人的意志还真拿不下来。所以要搞定这个问题的人先要问下自己,我是saiya吗?我能像他一样坚持到最后吗?下面把我安装的过程和遇到的问题和大家分享一下。

准备工作
1.不用说jdk要安装好,eclipse要用adt bundle,百度一搜很容易搜到。这样省掉了自己安装AVD和android sdk的麻烦,自己配麻烦死
2. 下好的adt bundle只带了android 4.4.2 sdk,也就是android 19,没有任何示例和文档,其实这些移植的话也够用的了,但必竟版本太高了,模拟器运行不快(最低要4.0以上),如果自己想下载别的版本的SDK就要在线下载了。但第一步连android更新列表你都fetch不下来,这就是第一个噩梦的出现,我曾在这里卡了两天两夜。玩android的人在线更新sdk是少不了的。但是国内的网络死活也连不上gl-ssl.google.com,据说被大陆墙了。这时网上各种奇葩文出现了,侃侃而谈如何解决这个问题,有的说改host的还给了几个错误的IP地址,有的说在AVD option里改把https强制http的等等。这些我都试了全都没用。我不敢说他们道听途说还是人云亦云。反正读者你记得那些所谓的牛人给的办法统统没用就行了别再浪费时间。正确的办法是设置代理

登录西刺免费代理IP网站: http://www.xici.net.co/  在国外高匿代理那一栏选一个时间靠前的,代理模式http或https的都行, 如下图所示

然后打开你的android sdk manager,点击 tools -> avd option,把代理那一栏填进去,一般来说试几个就能连上了。

注意:更新时千万别更新如下图两个,你更新了就等着挨折腾吧!Eclipse会各种报错各种奇葩问题接踵而来,绝对能搞死你,但你不更新啥事没有。

最下面Extras的android support library我也没更新,怕出问题,但是Intel x86 emulator acceleator我下载安装了,据说是一个新的模拟器能大大加快运行速度,我还没试。

还有一个离线安装的小技巧,假如你真的是在线安装android sdk很困难,可以试试离线安装。如果你在线更新成功了,你会发现在adt bundle的sdk的platforms目录下出现android-8,android-19等目录。其实这些android-XX目录是可以直接拷到另一个机子的,不需要再次下载,这样你只要做好备份,下次换了机子直接拷过去就行了,打开avd manger你会直接看到这些SDK已经装好了。如果你一次都没在线安装好,可以试试从网上找找离线安装包,看清梦版本改好名直接丢进platforms目录去。如android 4.4.3是android-19,其他的我就不知道了。但是笔者还是不建议这样做,除非是你自己以前在线更新好的拷走没事,从网上拷别人的离线包不是陈旧就是有其他问题,还是努力找找代理自己在线下载好些。

3.下载android DNK,我使用的是android-ndk-r8e,这个不用安装,直接解压就行了,以后待用。


Eclipse的配置:
1.配置好android 运行环境。打开Eclipse-->Window-->Preferences-->Android,配置好你本机Android sdk的安装路径,如下图sdk locations那个框

2.配置好android NDK运行环境。打开Eclipse-->Window-->Preferences-->Android-->NDK,配置好你本机NDK的安装路径;

3.在自己的Eclipse中导入cocos2d-x的android依赖工程,相当于vs里的libcocos2d那个库工程,我的做法是File->New->Other->Android->Android Project from Existing Code,导入cocos2d-x中和android相关的工程,我的路径是:D:\cocos2d-x-2.2.1\cocos2dx\platform\android\java,这样就可以使用这个工程作为所有cocos2dx android工程的依赖工程

4.导入你自己的工程,在Eclipse中,File->New->Other然后选择Andriod Project from Existing Code在Import Projects的Root Directory中将路径D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\PompaDroid\proj.android目录下的工程导入,不要勾选copy project into workspace(默认是不勾选的),据说路径问题很麻烦。那个PompaDroid就是我在vs中建的工程。

PS:此时在导入的项目上右键->Properties->Android,右侧下方会看到如图,Library部分就是依赖的上一步中导入的工程:

5.把你自己工程(D:\cocos2d-x-2.2.1\projects\PompaDroid)中Resources中的全部文件copy到android工程目录下的assets目录中,这一步不用怀疑,之后会出现黑屏问题,但不是这一步造成的。

编译环境的配置:
上面我们导入了工程,但离真机和模拟器调试成功还有些距离。(瀑布汗...)因为我们是不用cygwin的,所以要设置好NDK自己带的编译环境。

1.在android工程右键->Properties->Builders->New->Program,  Name随便起

  在Main标签下的Location,选择Browse File Systerm...,选择到android NDK下面的ndk-build.cmd文件 。

  Working Directory,选择Browse Workspace...,选择本项目。

2.在Environment标签下,点击new,

Name:NDK_MODULE_PATH

Value:D:\cocos2d-x-2.2.1;D:\cocos2d-x-2.2.1\cocos2dx\platform\third_party\android/prebuilt(注意自己的实际目录)
这是很重要的一步,但这样就行了吗?错!如果你这样设置,那么第2个噩梦也就随之出现了。这时你发现无论怎么编译,重新clean,系统总是提示bash找不到的错误。那是怎么回事呢?转义字符大家都知道吧?\t  \n  \c之类的在编程语言里都有特定含义,你这样设会让NDK认不出NDK_MODULE_PATH,所以要换一下反斜杠,改成D:/cocos2d-x-2.2.1;D:/cocos2d-x-2.2.1/cocos2dx/platform/third_party/android\prebuilt

选择Ok确认,返回Builders界面,去掉CDT Builder前面的勾选,并将你自己刚刚创建的Builder移动到最上面,全部配置好之后OK确认。
再点击properties-->c++ build,如下设定你的build command:

至此你才抛弃cygwin改成用NDK的编译环境,不会出现恼人的 bash not found错误了。
PS: 如果你照此设定还是出现"bash not found",你就暴力点,在Eclipse里右击那个错误,删除即可解决!
3. 设定要编译的cpp文件
查看proj.android项目下,jni目录下面的Android.mk文件,其中LOCAL_SRC_FILES :后面需要填上你的cocos2d-x项目中所有的.cpp文件, 但是如果cpp文件有成百个,那我们是不是要一个个复制呢?那累都得把人累死,而且文件一多你肯定100%出错。这是第3个噩梦,网上有人给出了好的办法,把.mk开头部分如下改写:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hellocpp_sharedLOCAL_MODULE_FILENAME := libcocos2dcppFILE_LIST := hellocpp/main.cppFILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../ClassesLOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
注:FILE_LIST:=hellocpp/main.cpp  你到jni目录下看一看,确实有个hellocpp文件夹,里面有个main.cpp,所以这里千万不要把hellocppn改成你项目名字。上面我贴出来的基本原样复制就可以了,什么都不用再改。这一段大意就是把classes目录下所有的cpp都加到文件列表里去,下面的都一样,都不需要改了。

现在基本工作应该做完了,用AVD模拟器试一试,发现黑屏,什么都没有。

第4个噩梦又开始了,这个噩梦没人指点自己搞足以让人搞疯。我又傻眼了,是不是刚才资源路径设错了找不到资源呢?可是发现真机调试没有问题能进到游戏,就是模拟器不行。老用真机也不是办法,我的I9300数据线接口都磨的快不行了,这时点开eclipse的Logcat,发现报错:
java.lang.IllegalArgumentException: No configs match configSpec
这又是一个高深莫测的错误呀,怎么办呢?网上说AVD 模拟器版本太低不支持opengl 2.0,要用Android sdk 4.0以上的才行,我就换成了那个Android 4.4.2,也就是Android 19(新建模拟器方法是在AVD manager里点new新建一个,选好Android sdk版本即可,非常简单,可参看下图),可是错误依旧,原来还要改两个地方
在AVD设置下方Emulation Options选项,勾选“Use Host GPU”,如下图:


再到android-ndk安装目录下的samples\hello-gl2\src\com\android\gl2jni目录下找到GL2JNIView.java,将其中大约102行的
setEGLConfigChooser( translucent ?
                             new ConfigChooser(8, 8, 8, 8, depth, stencil) :
                             new ConfigChooser(5, 6, 5, 0, depth, stencil) );
修改为:setEGLConfigChooser(5, 6, 5, 0, 0, 0); 
再到 Androidmainfest.xml文件下添加这一行 (eclipse里能看到)
<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 
至此,黑屏问题才算解决,我们终于在模拟器上见到了我们朝思幕想的游戏画面(ctrl+F12可竖屏变横屏):


真是不容易呀!虽然还有屏幕适配问题,但总算看到自己在VS上敲了两个月的代码在真机和模拟器上跑了。我把我自己遇到的问题基本都给交待清楚了,希望此文能给大家以帮助,再见!






0 0