android.mk文件

来源:互联网 发布:强力卸载软件 编辑:程序博客网 时间:2024/06/05 13:31

一、Android.mk说明:

Android.mk是Android提供的一种makefile文件。 Android.mk将是GNU Makefile的一部分,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。

二、示例代码

在cocos2dx中为Android打包时,需要编写Android.mk文件,代码如下:

# Android.mk必须首先定义LOCAL_PATH变量,用于查找源文件。宏函数'my-dir'由编译系统提供,# 返回当前路径(即包含Android.mk文件的目录)LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#导入库目录$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/extensions)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos/editor-support)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos/editor-support/cocostudio)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos/editor-support/spine)$(call import-add-path,$(LOCAL_PATH)/../../modules)# 这个模块的名字,它必须是唯一的,而且不能包含空格 ,由此变量名决定最终生成的目标文件名。 LOCAL_MODULE := cocos2dcpp_shared# 设置模块的二进制文件的名称,独立于LOCAL_MODULE (在libs/armeabi下生成libMyGame.so文件),# 即允许用户重新定义最终生成的目标文件名。    LOCAL_MODULE_FILENAME := libcocos2dcpp#遍历目录和子目录  define walk   $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))  endef  #遍历路径Classes下得目录和子目录文件,并存入ALLFILES变量中  ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)  #从ALLFILES目录中提取文件,并存入FILE_LIST中  #.cc是Linux/Unix下为C++源文件的默认扩展名,与.cpp一个意思  #.c 因为我要用到sqlite3.c    FILE_LIST := hellocpp/main.cpp  FILE_LIST += $(filter %.cpp, $(ALLFILES))  FILE_LIST += $(filter %.c, $(ALLFILES))  FILE_LIST += $(filter %.cc, $(ALLFILES))#搜索Classes下的子目录文件  FILE_INCLUDES += $(shell find $(LOCAL_PATH)/../../Classes -type d)  #根据搜索到的文件名 编译资源文件  LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)# 可选变量,表示头文件的搜索路径LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \                    $(LOCAL_PATH)/../../cocos2d \                    $(LOCAL_PATH)/../../cocos2d/cocos \                    $(LOCAL_PATH)/../../cocos2d/cocos/audio/include \                    $(LOCAL_PATH)/../../cocos2d/cocos/editor-support \                    $(LOCAL_PATH)/../../cocos2d/cocos/editor-support/cocostudio \                    $(LOCAL_PATH)/../../cocos2d/cocos/editor-support/spine \                    $(LOCAL_PATH)/../../cocos2d/extensions \                    $(LOCAL_PATH)/../../cocos2d/external \                    $(LOCAL_PATH)/../../cocos2d/external/chipmunk/include/chipmunk \# 加入静态库,加了LOCAL_WHOLE_STATIC_LIBRARIES代表编译器会将静态库完整链接而不会进行删减优化  LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_staticLOCAL_WHOLE_STATIC_LIBRARIES += spine_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_ui_staticLOCAL_WHOLE_STATIC_LIBRARIES += protobuf_staticLOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static#添加友盟库LOCAL_SHARED_LIBRARIES := mobclickcpp_sharedinclude $(BUILD_SHARED_LIBRARY)# 在Android.mk中引用模块 ,添加导入库(基于import-add-path添加的导入库目录) $(call import-module,.)$(call import-module,audio/android)$(call import-module,extensions)$(call import-module,editor-support/spine)$(call import-module,editor-support/cocostudio)$(call import-module,network)$(call import-module,protobuf)$(call import-module,external/chipmunk)#导入友盟模块$(call import-module,libmobclickcpp)

三、补充说明

CLEAR_VARS

CLEAR_VARS由编译系统提供(在ndk下的build/core/clear-vars.mk),它可以让GNU MAKEFILE为你清除许多LOCAL_XXX变量
(例如:LOCAL_MODULE 、LOCAL_SRC_FILES等 ),但是 LOCAL_PATH 除外。 因为所有的编译控制文件都在同一个GNU MAKE
执行环境中,即所有的变量都是全局的,所以需要清理。

BUILD_SHARED_LIBRARY

指向编译脚本,根据所有的在 LOCAL_XXX 变量把列出的源代码文件编译成一个共享库。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定编译为什么。编译成静态库.a文件, 静态库不能够加入到Project 或者APK中。

import-module

import-module用于导入外部的库,外部模块提供的.mk。import-module的路径是.mk文件所在目录。比如:
$(call import-module,extensions),则在cocos2d\extensions文件夹下有Android.mk文件