AOSP——Android.mk解析

Android.mk

Android.mk是什么?

Android.mk是用于控制Android代码的编译流程,用shell编写

Android.mk结构

设置当前路径

除带#的注释,Android.mk第一句话都是

复制代码
LOCAL_PATH := $(call my-dir)

即将my-dir方法的返回值赋值给LOCAL_PATH,让其等于当前目录,其中的my-dir方法在build/core/defintions.mk中定义,源码如下

复制代码
###########################################################
## Retrieve the directory of the current makefile
## Must be called before including any other makefile!!
###########################################################

# Figure out where we are.
define my-dir
$(strip \
  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
  $(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
    $(error my-dir must be called before including any other makefile.) \
   , \
    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
   ) \
 )
endef

清空所有LOCAL变量

接下来是

复制代码
include $(CLEAR_VARS)

CLEAR_VARS的值在/build/core/config.mk,源码如下:

复制代码
CLEAR_VARS := $(BUILD_SYSTEM)/clear_vars.mk

BUILD_SYSTEM在/build/core/cleanbuild.mk及/build/core/config.mk中均有定义,源码如下:

复制代码
BUILD_SYSTEM := $(TOPDIR)build/core

TOPDIR为空,所以BUILD_SYSTEM:=build/core ,故CLEAR_VARS=build/core/clear_vars.mk,其内容为清空所有LOCAL变量,部分源码如下:

复制代码
###########################################################
## Clear out values of all variables used by rule templates.
###########################################################

# '',true
LOCAL_2ND_ARCH_VAR_PREFIX:=
LOCAL_32_BIT_ONLY:=
LOCAL_AAPT2_ONLY:=
LOCAL_AAPT_FLAGS:=
LOCAL_AAPT_INCLUDE_ALL_RESOURCES:=
LOCAL_AAPT_NAMESPACES:=
LOCAL_ADDITIONAL_CERTIFICATES:=
LOCAL_ADDITIONAL_CHECKED_MODULE:=
LOCAL_ADDITIONAL_DEPENDENCIES:=
LOCAL_ADDITIONAL_HTML_DIR:=
LOCAL_ADDITIONAL_JAVA_DIR:=

重新设置LOCAL变量

接下来是为自己的代码设置编译流程,常用的变量及取值有

变量 取值及意义
LOCAL_PACKAGE_NAME 包名,自定义
LOCAL_MODULE_TAGS optional
LOCAL_SRC_FILES $(call all-java-files-under, src)
LOCAL_STATIC_JAVA_LIBRARIES android-support-v4
LOCAL_JAVA_LIBRARIES
LOCAL_CERTIFICATE platform
LOCAL_SDK_VERSION current
LOCAL_PRODUCT_MODULE true
LOCAL_OVERRIDES_PACKAGES
LOCAL_STATIC_ANDROID_LIBRARIES \ android-support-v7-appcompat \ android-support-v7-recyclerview

选择构建方式

接下来是为自己的代码设置构建方法,常用的构建方式及意义有

构建方式 意义
include $(BUILD_PACKAGE) 构建为app BUILD_PACKAGE的值在/build/core/config.mk BUILD_PACKAGE := $(BUILD_SYSTEM)/package.mk 意为引进build/core/package.mk为程序打包

调用当前目录下的所有mk文件

复制代码
include $(call all-makefiles-under,$(LOCAL_PATH))

all-makefiles-under方法在在build/core/defintions.mk中定义,源码如下

复制代码
相关推荐
uwvwko40 分钟前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
fzxwl1 小时前
隆重推荐(Android 和 iOS)UI 自动化工具—Maestro
android·ui·ios
LittleLoveBoy3 小时前
踩坑:uiautomatorviewer.bat 打不开
android
居然是阿宋4 小时前
Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析
android
CGG926 小时前
【单例模式】
android·java·单例模式
kp000007 小时前
PHP弱类型安全漏洞解析与防范指南
android·开发语言·安全·web安全·php·漏洞
编程乐学(Arfan开发工程师)12 小时前
06、基础入门-SpringBoot-依赖管理特性
android·spring boot·后端
androidwork12 小时前
使用 Kotlin 和 Jetpack Compose 开发 Wear OS 应用的完整指南
android·kotlin
繁依Fanyi13 小时前
Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
android·前端·css·编辑器·codebuddy首席试玩官
奔跑吧 android16 小时前
【android bluetooth 框架分析 02】【Module详解 6】【StorageModule 模块介绍】
android·bluetooth·bt·aosp13·storagemodule