android 编译系统make文件

本文介绍了编译系统的构成,包括编译中枢、子项目和输出路径等核心概念。详细解释了Android.mk文件的作用及其如何描述子项目的源文件和输出目标类型。此外还介绍了编译过程中的关键变量和命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译系统包括编译中枢,子项目,输出路径。

编译中枢包括各种.mk文件,这些文件将遍历所有子项目,并生产所有target,从而当用户调用make XXX命令,中枢能够知道应该执行什么命令以长生指定的target

每个子项目必须包含一个Android.mk文件,该文件将描述该项目中包含的哪些源文件,并指定该项目的输出目标类型(jar包、可执行程序、APK等),编译中枢内部定义了一些变量,各android.mk文件只是对他赋值而已。

LOCAL_PATH:= $(call my-dir) 指定子项目的绝对路径

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional 指定子项目所属的标签 (optional,user,eng,userdebug)

LOCAL_SRC_FILES := $(call all-subdir-java-files) 所包含源文件

LOCAL_PACKAGE_NAME := 指定项目名称(java) ,作为make XXX中的XXX

LOCAL_MODULE := 指定项目名称(c/c++),作为make XXX中的XXX


LOCAL_CERTIFICATE := platform 指定apk项目将使用何种签名文件签名最后生成的apk,系统一共包含四种:

  1. platform    Framework源码最后生成一个jar包,该jar包默认使用该类型签名。
  2. shared 一些系统应用程序使用该类型签名,比如Contacts
  3. user 一些私有项目使用该签名
  4. tests 调试过程中一般使用该签名

LOCAL_JAVA_LIBRARIES := 指定子项目编译所依赖的jar包

LOCAL_C_INCLUDES 指定编译c所包含的头文件

LOCAL_SHARED_LIBRARIES 指定c可链接动态库

LOCAL_STATIC_LIBRARIES 指定c可链接静态库

LOCAL_MODULE_CLASS

LOCAL_MODULE_PATH 指定编译目标存放路径

LOCAL_PREBUILT_LIBS 预编译时使用,指定需要复制的库

include $(BUILD_MULTI_PREBUILT) 预编译,copy库文件到动态库

include $(BUILD_PACKAGE) 指定编译的目标对象 编译成apk

include $(BUILD_JAVA_LIBRARY)                                          指定编译的目标对象 jar包

include $(BUILD_SHARED_LIBRARY) 指定编译的目标对象 C动态库

include $(BUILD_STATIC_LIBRARY) 指定编译的目标对象 C静态库

include $(BUILD_EXECUTABLE) 指定编译的目标对象 可执行程序

android make 介绍 Make 文件说明 整个 Build 系统的入口文件是源码树根目录下名称为“Makefile”的文件,当在源代码根目录上调用 make 命令 时,make 命令首先将读取该文件Makefile 文件的内容只有一行:“include build/core/main.mk”。该行代码的作用很明显:包含 build/core/main.mk 文 件。在 main.mk 文件中又会包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。 这些 Make 文件间的包含关系是相当复杂的,图 3 描述了这种关系,该图中黄色标记的文件(且除了 $开头的文件) 都位于 build/core/ 目录下。 Android 源码中包含了许多的模块,模块的类型有很多种,例如:Java 库,C/C++ 库,APK 应用,以及可执行文件 等 。并且,Java 或者 C/C++ 库还可以分为静态的或者动态的,库或可执行文件既可能是针对设备(本文的“设备”指 的是 Android 系统将被安装的设备,例如某个型号的手机或平板)的也可能是针对主机(本文的“主机”指的是开发 Android 系统的机器,例如装有 Ubuntu 操作系统的 PC 机或装有 MacOS 的 iMac 或 Macbook)的。不同类型的模块 的编译步骤和方法是不一样,为了能够一致且方便的执行各种类型模块的编译,在 config.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_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值