android.mk文件

一、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_static

LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_ui_static
LOCAL_WHOLE_STATIC_LIBRARIES += protobuf_static

LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static


#添加友盟库
LOCAL_SHARED_LIBRARIES := mobclickcpp_shared

include $(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文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值