继续上一篇,我接着在MyGame工程干活,这次要将MyGame运行在Android设备上。
要将cocos2dx的项目在Android上跑起来需要NDK和eclipse
NDK用来编译cocos2dx的cpp文件,将其打包成动态库文件,例如libgame.so;
由于google被封了,NDK的下载页面是打不开的,不过我们可以直接通过链接下载NDK:
dl.google.com/android/ndk/android-ndk-r8e-darwin-x86.tar.bz2
我用的是mac版本的NDK r8e版本,需要其他版本可以手动修改上面的链接,也有人整理出来下载链接了:
http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html
eclipse用来读取cocos2dx建立的工程,打包出apk或者直接运行。但是使用eclipse配置出Android环境是非常折腾的事情,尤其是在大陆连接google特别费力的情况(ˇˍˇ)
现在很多人使用的都是adt-bundle,这个其实就是继承了ADT的eclipse,链接如下:
http://www.cnblogs.com/bjzhanghao/archive/2012/11/14/android-platform-sdk-download-mirror.html
下载好了NDK和adb-bundle以后就可以开始干活了~
首先我们还是假设MyGame的路径是/Users/zf/MyGame/,NDK的路径是/Users/zf/android-ndk-r8e。
可以注意到,在MyGame目录下面,有个proj.android文件夹,这个就是cocos2dx给我们生成的android工程,我们接下来的任务就是在这个目录进行了~
要将MyGame在Android平台运行起来,主要有两步:
1.使用NDK编译生成动态库;
2.使用eclipse建立Android工程,将MyGame运行起来;
其实对于很多总是使用IDE的程序员来说,使用NDK编译是一件非常难的事情,这里需要修改Android.mk文件和build_native.sh脚本。我对这两个其实不是很熟悉,尤其是shell脚本,这个我是很陌生的。
使用NDK编译这一过程中,我们主要要涉及到的文件我先列出来:
1. /Users/zf/MyGame/proj.android/build_native.sh:这个shell脚本主要是设置工程路径,cocos2d库的路径,复制游戏使用的资源文件,然后使用NDK编译出动态库;
2. /Users/zf/MyGame/proj.android/jni/Android.mk:
关于Android.mk文件,在NDK的帮助文档是这么描述的:
An Android.mk file is a small build script that you write to describe yoursources to the NDK build system. Its syntax is described in details inthe file docs/ANDROID-MK.html.
简单来说,Android.mk文件就是一个小脚本,用来告诉NDK你的源文件该怎么去编译,关于他的语法可以去看ANDROID-MK.html。
3. /Users/zf/MyGame/proj.android/jni/Application.mk:
Application.mk是这么说的:
TheApplication.mk file describes your application itself. See thedocs/APPLICATION-MK.html document to understand what this file allows youto do.
Application.mk是描述你的程序本身的。
上面两个文件都是NDK编译是需要的文件,关于他们在NDK目录下都有详细的帮助文档,不过是英文的,目录是/Users/zf/android-ndk-r8e/docs/。
------------------------------------------------------------------------------------------------------------------------------------------------
下面先看Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1
我们一个个开始看,看明白这个就行,至于Application.mk文件里面没有的语法,大家就自行参阅帮助文档,不过基本上来说,Application.mk是不用做什么改动的~
APP_STL:
By default, the NDK build system provides C++ headers for the minimal C++ runtime library (/system/lib/libstdc++.so) provided by the Android system.
However, the NDK comes with alternative C++ implementations that you can use or link to in your own applications.
Define APP_STL to select one of them. Examples are:
APP_STL := stlport_static --> static STLport library
APP_STL := stlport_shared --> shared STLport library
APP_STL := system --> default C++ runtime library
APP_STL就是用来告诉NDK使用哪一套stl的库来编译你的程序的,默认ndk使用最简化的c++库。
gnustl和stlport是不同的c++ stl的实现,stlport是完全免费的小巧的实现;
gnu也是免费的,但是gnu似乎不允许对其代码的修改。
一般是使用gnu,官方提供的stlport是不支持rtti和exception的,所以不能使用-frtti和-fexception这两个编译选项的。
APP_CPPFLAGS
A set of C++ compiler flags passed when building C++ sou