Android.mk文件解析

在源码树中每一个模块的所有文件通常都相应有一个自己的文件夹,在该模块的根目录下有一个名称为“Android.mk” 的文件。编译系统正是以模块为单位进行编译,每个模块都有唯一的模块名,一个模块可以有依赖多个其他模块,模块间的依赖关系就是通过模块名来引用的。也就是说当模块需要依赖一个jar包或者apk时,必须先将jar包或apk定义为一个模块,然后再依赖相应的模块。

对于Android.mk文件,通常都是以下面两行开头:

LOCAL_PATH := $(call my-dir)     //设置当编译路径为当前文件夹所在路径
include $(CLEAR_VARS)    //清空编译环境的变量(由其他模块设置过的变量)
为方便模块编译,编译系统设置了很多的编译环境变量,如下:

LOCAL_SRC_FILES:当前模块包含的所有源码文件;
LOCAL_MODULE:当前模块的名称(具有唯一性);
LOCAL_PACKAGE_NAME:当前APK应用的名称(具有唯一性);
LOCAL_C_INCLUDES:C/C++所需的头文件路径;
LOCAL_STATIC_LIBRARIES:当前模块在静态链接时需要的库名;
LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库名;
LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的Java静态库;
LOCAL_JAVA_LIBRARIES:当前模块依赖的Java共享库;
LOCAL_CERTIFICATE:签署当前应用的证书名称,比如platform。
LOCAL_MODULE_TAGS:当前模块所包含的标签,可以包含多标签,可能值为debgu,eng,user,development或optional(默认值)
针对这些环境变量,编译系统还定义了一些便捷函数,如下:

$(call my-dir):获取当前文件夹路径;
$(call all-java-files-under, ):获取指定目录下的所有Java文件;
$(call all-c-files-under, ):获取指定目录下的所有C文件;
$(call all-Iaidl-files-under, ) :获取指定目录下的所有AIDL文件;
$(call all-makefiles-under, ):获取指定目录下的所有Make文件;
示例:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) # 获取所有子目录中的Java文件 
LOCAL_SRC_FILES:= $(call all-subdir-java-files) # 当前模块依赖的动态Java库名称  
LOCAL_JAVA_LIBRARIES:= com.gityuan.lib # 当前模块的名称  
LOCAL_MODULE:= demo # 将当前模块编译成一个静态的Java库
include $(BUILD_STATIC_JAVA_LIBRARY)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值