cocos2d-x 菜鸟实习生学习篇(十) win32项目移植到安卓
再两天就过年啦,这篇博客应该是今年的最后一篇吧。在此提前恭贺大家。。。。元宵节快乐!!!相信很多大牛说的都是新年快乐之类的,但是咱不能跟他们一样啊,咱虽然博客不咋的,但是肯定要体现出自己的身份跟内涵。所以,祝大家。。清明节快乐。。。
可能是因为快过年的缘故,boss难得的没有给我布置新的任务,这让我难得有时间做自己想做的事,如用了一周多做了个小游戏,还有用来好几天看 c++ primer。本来想把游戏代码贴到博客上来,最后想想,算了:不出来献丑了~~
将win32项目移植到安卓上,这个过程当真让我死去活来。可是能因为之前没接触过JAVA的缘故吧。不过我相信我这篇博客还是讲的蛮完整的,最后介绍了两种编译动态库的方法,请看:
一、首先要要知道你到底要下载什么!!!
1. eclipse下载32位的(官网有)http://cygwin.com/install.html
Eclipse c++版本下载:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/indigo/SR2/eclipse-cpp-indigo-SR2-incubation-win32.zip
3. Android SDK直接用32位的(没有区分32还是64)不用安装,下载后直接解压到合适目录即可,android SDK采用了Java语言,所以需要先安装JDK 5.0及以上版本。直接下载jdk安装文件安装更为方便。Sdk 里有eclipse,编码工具
http://xiazai.zol.com.cn/xiazaiDown.php?softid=424807&type=7
ADT下载地址:http://dl.google.com/android/ADT-18.0.0.zip(这个版本太低了,大家可以自己去百度下载20以上的)
4. Android NDK 直接用32位的(没有区分32还是64),有这个东西才能让安卓支持c/c++
:http://developer.android.com/tools/sdk/ndk/index.html#Installing
5.CygWin,这个我懒得去官网下载安装,直接用了一个百度一下找的(Cygwin Easy 2007.03.21(ISO)),解压后,直接把cygwin目录剪切到C盘根目录了,这个大家可以不理我,自己搞定CygWin的安装百度就有,或者http://www.cygwin.com/,这种方式下载会久了点。但是靠谱(这个先别急着下,后面会教你到底应该怎么去安装这货)
二、eclipse安装及其设置:
下载完后不用安装,解压后直接可以使用。打开eclipse ,
1、如果eclipse还不支持安卓,那就要下载安卓组件。
点击help,-soft update(好像是这个),然后,在Work with栏填入https://dl-ssl.google.com/android/eclipse/等待eclipse搜索完成后,会在主视窗中列出ADT插件下载项目,全部选择,点击Next按钮。
如果之前已经有下载好的ADK,可以选择ADD,然后在弹出的窗口选择Archive,把你ADT的存放路径输进去。
再次点选Next按钮后出现软件许可窗口,需要勾选同意,然后点击Finish按钮eclipse会开始下载安装ADT插件。完成后重新启动eclipse,可以在File->New->Project菜单下找到Android
Project证明ADT更新成功
2、如果eclipse还不支持c++(我的版本默认就是c++的),那就要下载CDT插件:
CDT可以从http://www.eclipse.org/cdt/downloads.php下载到,对应eclipse3.7.1的CDT插件版本为CDT8.0.1。 下载完成后,启动eclipse,选择Help-> SoftwareUpdates,点击ADD按钮选择archive,选择下载好的CDT插件zip文件(cdt-master-8.0.1.zip)然后OK确认,勾选全部安装项目,点击next按钮eclipse会开始安装。同样,在安装过程中有一次同意软件协议选项的勾选。
完成后eclipse会要求重启软件,OK即可。重启eclipse后选择New->Projec会发现eclipse已经支持C/C++项目。
3、关联NDK
使用NDK的目的为将C/C++编写的代码生成能在arm上运行的*.so文件。由android的java代码来调用。AndroidNDK可以从http://developer.android.com/sdk/ndk/index.html进行下载,截止2012-1-19最新版本为r7
菜单-窗口-preference-android-ndk,然后把ndk的根目录路径输进去
4、下载android sdk
Android SDK可以从 http://developer.android.com/sdk/index.html下载到,截止到2012-1-19最新版本为r16,请选择对应windows操作系统位数进行下载。下载完成后解压到任意路径即可,解压后路径内不包含任何SDK,还需要运行 SDK Manager.exe(在下载的sdk目录下)进行SDK包下载。 笔者没有下载最新的SDK,是通过r10版本的SDKManager进行更新的。将r10版本的 SDK Manager.exe更新至r15,即可看到新发布的SDK包。
5、cygwin安装
Cygwin为Linux模拟环境,因使用NDK生成本地*.so本地库需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。Cygwin可以从http://cygwin.com/install.html 下载到。(可以选择下载但不安装选项来创建“本地安装包”)安装时,在Cygwin默认安装配置没有安装gcc编译器,我们必须用到的Devel类中的四个组件包,如果嫌找起来过于麻烦,可将Devel类从Default改为Install全部安装也可以。
安装过程:在官网下载一个setup.exe,然后运行他,
第一步:运行setup程序,第一步图略,直接点击Next进入下一步。
第二步:选择安装方式,第一次可以采用DirectConnection在线下载安装,如有现成的离线包,可以选择离线安装(Install from Local Directory)。
第三步:选择安装目录,比如C:\Cygwin,注意此目录是指Cygwin最终的安装目录,不是下载文件暂存目录。
第四步:设置本地包暂存路径
暂存目录默认是放到setup.exe的同级目录下,下载后名字类似ftp%3a%2f%2fcygwin.mirrors.pair.com%2f这样格式。
第五步:设置网络连接方式
第六步:选择下载站点地址
起初尝试几个看哪个速度快就用哪个地址(如果感觉不快就点取消,再次来过)。
第七步:等待加载安装项载入,选择安装项
我们编译NDK,在默认设置下,只需选择Devel(点击列表中Devel,将后面的Default改为Install,图中箭头所示),其它均为默认状态。
第八步:等待下载完成
下载完成时间决定于你选择的安装包数量及网络连接速度,比如按照本文默认的选择方式,可能需要4-5个小时,下载后压缩包约750M,下载完成后会自动安装到上文设置的安装目录。
提醒:第一次下载完成后,最好把下载的包目录做个备份,下次安装同样的环境可以直接使用离线安装方式(第二步中选择本地安装)。
验证Cygwin环境
安装完成后,先运行Cygwin一次(Cygwin.bat),以便创建一些用户环境文件,分别输入:make -v和gcc -v.如果检测成功,会有make和gcc相关版本信息打印出来,如下图。(我有试过直接下载了一个2G的cygwin,解压后可以直接用。。。Gcc -v 或者 make-v 都有版本信息输出。)
三、创建android项目
1:创建android工程
进到引擎目录下 找到create-android-project.bat 文件 双击执行
一般都会提示没有cygwin,android-sdk,NDK(关联就是在这里关联的,该路径),所以要先安装这些东东。用UE打开create-android-project.bat,然后修改cygwin,NDK等的安装路径
1. 输入android包名。 我输入的是:com.bearsoft.game.demo
1. 输入android包名。 我输入的是:com.bearsoft.game.demo
2. 输入项目名。 我输入的是:win32androidDemo
3. 输入android版本id。 我输入的是 3. 也就是 android2.1版本。
(注意,这里是根据它提示的序号输入的,如
这个说明你目前只有4.2这个版本可以用,如果你想用其他安卓版本,就要去下载
下载方式:在E:\android sdk\adt-bundle-windows-x86这个目录下有个sdk manage,点击后选择你所要的版本,然后下载,过程可能有点持久。
4. 顺利的话现在android项目已经建好了。如果报错请接着看下面部分。如果没报错跳过这部分看后面的。 我遇到的错误是:
没关系,这是CygWin没有配置好的原因,把CygWin的bin目录路径加入到环境变量的Path里就行了(我的电脑-右击-属性-高级-环境变量-path修改:;E:\cygwin\bin
5、生成项目后,进入项目里的proj.android/jni,编辑android.mk,
将准备好的代码文件拷贝到工程下的Classes目录;资源文件拷贝到工程下的Resource目录。打开Classes目录找到Android.mk,使用编辑工具打开,在LOCAL_SRC_FILES:= 填入要编译的cpp文件,保存后关闭。如: LOCAL_SRC_FILES:= AppDelegate.cpp \
GameOverScene.cpp\ Joystick.cpp \ TerribleGameScene.cpp
四、编译
编译有两种办法,一个是用cygwin ,一个是用eclipse编译。首先将cygwin:
1、打开cygwin,输入工程路径下的Android文件夹的完整路径,如:cdd:/makeapk/MyGame/Android。然后运行build_native.sh文件,具体输入为:./build_native.sh
2. 编译过程中,可能会提示 NDK_ROOT NOT DEFINE,这说明你没有在环境变量里新建一个NDK_ROOT这个环境变量。我的电脑-右键-属性-高级-环境变量,添加这三个环境变量:
里面的内容分别是:cocos2d-x 的安装根目录:E:/hzk/cocos2d-x/cocos2d-2.0-x-2.0.4,
和NDK_MODULE_PATH:E:/hzk/cocos2d-x/cocos2d-2.0-x-2.0.4;E:/hzk/cocos2d-x/cocos2d-2.0-x-2.0.4/cocos2dx/platform/third_party/android/prebuilt
还有 NDK_ROOT :E:\android\android-ndk-r8
3.补充一点,每次打开cygwin并输入完整路径是很麻烦的事情,可以通过下面的方法自动执行一些命令:用记事本打开cygwin根目录下的.\etc\bash.bashrc文件,在文件末尾加入欲输入的命令,例如 cd e: cdAPKMAKE/ko/android ./build_native.sh 保存后,下次运行cygwin时,这几行命令将自动被执行。
4、编译完成
5.打开eclipse,选择New->AndroidProfect创建新的android工程。
6.选择通过已存在的代码创建工程,浏览工程目录下的android文件夹,eclipse会自动填写项目名,Finish即可。
7. 右键点击创建工程是输入的工程名对应的java文件,选择Run As->RunConfigurations进入运行设置。在弹出对话框中双击AndroidApplication选项,在Android选项卡选择好工程点击Run按钮即可。由于真机可用的*.apk文件将生成于<工程路径>/Android/bin路径下。
接下来讲用eclipse编译:
1、导入项目,切记,在导入到时候不要选复制选项,
2、导入成功后,选择项目,右击-androidtools - add native support--
3、run as - run configuration--选择一个模拟器。 开始编译,时间有点久,过程跟cygwin 类似。
查看动态库有没有编译完成,进入项目 目录,看libs 里有没有.so文件
黑屏的原因:
1、没有手动拷贝资源文件到ASSETS文件夹下面;
2、COCOS2D-X2.0以上因为OPGELES的关系不支持模拟器,所以请使用真机调试; 或者也有可能是2.0.4有些问题,换2.0.3的试试
PS:真机调试的简单方法是装豌豆荚,因为手机专用驱动很难找,而豌豆荚会帮你装好所有驱动,然后直接连接就是了。
HELLOWORLD官方示例程序按照上述方法可运行之后,请学习官方示例程序中的.MK文件,然后就可以用自己的CLASS、资源、MK文件,进行自己的程序移植编译了。稍微简单一点的方法是更改示例程序MK文件之后,拷贝进去CLASS和资源,然后尝试运行。可运行之后再去修改图标、程序名等等。