Android系统makefile文件(Android.mk)组织结构

要的源文件,不需要包含它的依赖文件,因为编译时会自动的添加

   LOCAL_C_INCLUDES  一些额外的头文件路径

   LOCAL_SHARED_LIBRARIES  需要的共享库

   LOCAL_MODULE      C,C++ 本模块的名字,必须是唯一的

   LOCAL_PACKAGE_NAME  JAVA的LOCAL_MODULE

   LOCAL_MODULE_TAGS   模块标记,一般的取值范围:debug eng tests optionalsamples shell_ash shell_mksh,默认optional

   LOCAL_MODULE_CLASS 这个不用我们自己定义,系统会根据生成模块类型的不同赋值。取值:APPS,JAVA_LIBRARIES,SHARED_LIBRARIES,STATIC_LIBRARIES,EXECUTABLES

   LOCAL_MODULE_PATH 模块的生成后存放的路径,不用定义,有默认值

   LOCAL_MODULE_SUFFIX 后缀名,不用定义,有默认值(.apk,.jar,.so,.a)

  LOCAL_BUILT_MODULE_STEM 编译目标要生成的文件名,如果我们定义了    LOCAL_BUILT_STEM值就是$(LOCAL_BUILT_STEM)$(LOCAL_MODULE_SUFFIX),否则就是$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)。若要编译JAVA的库文件和执行文件会被置为jablib.jar和package.apk。

   LOCAL_INSTALLED_MODULE_STEM  定义规则跟LOCAL_BUILT_MODULE_STEM相同,但是不会有设置为单一值的情况。

   LOCAL_BUILT_MODULE 编译目标完整的路径和文件名

  LOCAL_PRELINK_MODULE只有在编译.so的时候才会有的选项,主要是通过预链接的方式来加快程序启动和执行的速度,如果设置是真的话,那你要在build/core/prelink-linux-arm.map中定义你的库需要使用的空间,空间不够的话会报错

       4.    include$(BUILD_SHARED_LIBRARY)

      BUILD_SHARED_LIBRARY在config.mk里有定义,指向相应的.mk文件,根据要生成的模块的类型,包含相应的文件。

     BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk

     BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk

     BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk

     BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk

     BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk

     BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk

     BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk

     BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk

     BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk

     BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk

     BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk

     BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk

     BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk

     BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk

     BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk

     BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk

     BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk

     BUILD_KEY_CHAR_MAP := $(BUILD_SYSTEM)/key_char_map.mk

主要分为两种类型:prebuilt和bin/lib文件。这些.mk文件都包含build/core/base_rule.mk。这个文件的作用如下:

(1).  根据LOCAL_IS_HOST_MODULE,LOCAL_MODULE_CLASS,LOCAL_MODULE这三个变量的值来判断这个模块是否是全局唯一的,我们应该使LOCAL_MODULE全局唯一的。

(2). 设置LOCAL_MODULE_PATH的默认值。LOCAL_MODULE_PATH:=$($(my_prefix)OUT$(use_data)_$(LOCAL_MODULE_CLASS))若my_prefix=TARGET_ use_data=””  LOCAL_MODULE_CLASS=APPS 则LOCAL_MODULE_PATH=$(TARGET_OUT_APPS)。TARGET_OUT_APPS在envsetup.mk定义TARGET_OUT_APPS=out/target/product/generic/system/app

(3). 设置LOCAL_BUILT_MODULE的默认值。LOCAL_BUILT_MODULE:=$(built_module_path)/$(LOCAL_BUILT_MODULE_STEM),built_module_path就是编译目标存放的路径。有两种路经built_module_path=target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/,built_module_path=/target/product/generic/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/。以Camera为例:LOCAL_BUILT_MODULE=out/target/product/generic/obj/APPS/Camera_intermediates/Camera.apk。

(4).  设置LOCAL_INSTALLED_MODULE的默认值。LOCAL_INSTALLED_MODULE=$(LOCAL_MODULE_PATH)/$(LOCAL_MODULE_SUBDIR)$(LOCAL_INSTALLED_MODULE_STEM),这里LOCAL_MODULE_SUBDIR留给我们自己定义一般为空。但是要记得的是当我们设置了它之后,要在每个模块的最后要将这个值清空,因为默认CLEAR_VARS是不会清空这个值的。以Camera为例:LOCAL_INSTALLED_MODULE=out/target/product/generic/system/app/Camera.apk

(5).  将.aidl和.logtags文件转化为.java文件,存放在out/target/common/obj /src/,out/target/common/obj/目录是JAVA的中间文件的存放目录

(6). 定义.PHONY:$(LOCAL_MODULE)目标规则.拷贝$(LOCAL_BUILT_MODULE)到$(LOCAL_INSTALLED_MODULE),这两个变量的值前面都有说明。若不想把这个模块编译进系统的话,声明LOCAL_UNINSTALLABLE_MODULE即可(只适用于静态库)。在这里只是拷贝文件,真正的编译工作是在它的外层.mk文件做的,并把生成的目标文件放在$(LOCAL_BUILT_MODULE)。若是prebuild就不需要编译了,只是将已经存在的文件做简单的拷贝工作。当我们要安装指定的模块到系统的时候,只要make $(LOCAL_MODULE)就行了。定义cleantarget目标规则,删除$(LOCAL_BUILT_MODULE),$(LOCAL_INSTALLED_MODULE), $(intermediates)文件或目录

(7).  定义或添加以ALL_MODULES.开头的值,将本模块变量保存起来。

ALL_MODULES.$(LOCAL_MODULE).CLASS
ALL_MODULES.$(LOCAL_MODULE).PATH
ALL_MODULES.$(LOCAL_MODULE).TAGS
ALL_MODULES.$(LOCAL_MODULE).CHECKED
ALL_MODULES.$(LOCAL_MODULE).BUILT
ALL_MODULES.$(LOCAL_MODULE).INSTALLED
ALL_MODULES.$(LOCAL_MODULE).REQUIRED
ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS

ALL_MODULE_TAGS

ALL_MODULE_TAGS.$(LOCAL_MODULE_TAGS)

ALL_MODULE_NAME_TAGS

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值