下面是我用cocos2d-x写的一款塔防游戏的demo
在编译到android平台的时候需要自己配置Android.mk文件,下面我就着这实例来介绍一下
首先Android.mk file用来向编译系统描述你的源代码信息的。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。
那什么是Makefile呢?
一般来说,c,c++等首先会将c,cpp等源代码文件编译成中间代码文件,即object file
在unix下面是.o 在windows下面是.obj ,如下图,是我用Cygwin在windows下面将Classes中源代码编译出来的
这个过程就是传说中的编译(compile),接下来的步骤就是链接(link)即将你程序的所有object file合成执行文件。
编译过程主要是代码文件的词法分析和语法分析,检测函数变量等声明是否正确 详解->http://baike.baidu.com/view/69568.htm
链接过程主要是将程序各个模块之间相互应用的部分处理好,使得各个模块之间能够正确的衔接起来。直接点说就主要是链接函数,全局变量等。
而要用的就是职权案编译好的目标中间文件(.o,.obj)
一般情况下都将这些o文件 obj文件打包也就是所谓的“库文件”(library file)
在unix下是 .a
在windows下是.lib
如下图,libdefensecommon.a文件就是将上图中所有.0文件打成的包,而其它.a文件是cocos2d-x引擎自动
为我们打的一些关于图片,网络,xml,声音模块的包
Android.mk可以有多个,我们可以在每一个Android.mk文件中定义一个或者多个模块。
只要正确填写了相应的编译信息,NDK的编译系统会自动为我们处理各种细节问题。
好了,铺垫了一通,现在我们来”实战“一下吧!
我工程中有两个Android.mk文件
根目录下的
和jni目录下的
来看看左边中的Android.mk文件(红色字体为解释)
//注: ‘:=’是赋值的意思;'+='是追加的意思;‘$’表示引用某变量的值。
LOCAL_PATH := $(call my-dir)
//CLEAR_VARS 由编译系统提供(可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为 //CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk),指定让GNU MAKEFILE该脚本为你清除许多 LOCAL_XXX 变量 ( 例如 LOCAL_MODULE , //LOCAL_SRC_FILES ,LOCAL_STATIC_LIBRARIES,等等…)
include $(CLEAR_VARS)LOCAL_MODULE_FILENAME := libdefensecommon
Classes/tinystr.cpp\
Classes/tinyxml.cpp \
Classes/tinyxmlerror.cpp\
Classes/tinyxmlparser.cpp \
Classes/ArmedButton.cpp \
Classes/AttackWave.cpp\
Classes/BonusItem.cpp \
Classes/Creep.cpp\
Classes/CreepBean.cpp \
Classes/DialogLayer.cpp\
Classes/DTDialogView.cpp \
Classes/MapCenterScene.cpp \
Classes/MapCenterGUILayer.cpp\
Classes/GameHUD.cpp \
Classes/GameMediator.cpp\
Classes/GameScene.cpp \
Classes/HelpScene.cpp\
Classes/LevelData.cpp \
Classes/MainMenuScene.cpp \
Classes/MapData.cpp\
Classes/PathNode.cpp \
Classes/Soldier.cpp\
Classes/SoldiersSettingScene.cpp \
Classes/TileBean.cpp \
Classes/AppDelegate.cpp
//LOCAL_WHOLE_STATIC_LIBRARIES
//通常这在你想往共享库中增加一个静态库时是非常有用的,共享库就会接受到静态库暴露出的content
//即我的程序中需要用到cocos2d-x已经编译好的 cocos2dx_static cocosdenshion_static cocos_extension_static静态库
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
//定义这个变量用来记录C/C++编译器标志集合,并且会被添加到其他任何以LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的模块的LOCAL_CFLAGS定义中。
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
// 一个BUILD_SHARED_LIBRARY 变量用于编译一个静态库。静态库不会复制到的APK包中,但是能够用于编译共享库
//这将会生成一个名为 lib$(LOCAL_MODULE).a 的文件 即 libdefensecommon.a
include $(BUILD_STATIC_LIBRARY)