Android Build System

概述

  • 说明文档在源码目录: build/core/build-system.html

编译的工作原理

单模块编译

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ModuleName
LOCAL_SRC_FILES := $(call all-java-files-under, src)
include $(BUILD_PACKAGE)

调用mmm编译该模块,实际运行以下命令:

ONE_SHOT_MAKEFILE="$MAKEFILE" make -C $T $DASH_ARGS $MODULES $ARGS
  • 意思是设置ONE_SHOT_MAKEFILE环境变量后调用make
  • 那么该main.mk文件即会被引用,Make的Target为$MODULES即all_modules
  • 每一个通过 BUILD_XXX 引用的mk文件都含有 all_modules 这个Target

LOCAL变量

变量 取值 说明
LOCAL_DEX_PREOPT true/false 是否生成odex
LOCAL_MODULE_TAGS user eng tests optional 决定该模块在什么版本编译,tests版本不强制语言本地化
LOCAL_MANIFEST_FILE 指定manifest的文件,默认是在mk文件同级目录,编译gradle目录结构项目时可用

编译变量

实际是一个mk文件路径,用于编译apk、Java类库、C/C++库、C/C++应用程序等

变量 说明
BUILD_JAVA_LIBRARY Java动态库,编译时用到,运行时从系统库加载,一般都产物都在system/framework
BUILD_STATIC_JAVA_LIBRARY Java静态库,编译时直接打包
BUILD_PREBUILT
BUILD_MULTI_PREBUILT 集成已有库

集成

集成aar

# 编package时引入aar:
LOCAL_STATIC_JAVA_AAR_LIBRARIES:= <aar alias>
...
include $(BUILD_PACKAGE)

# 引入第三方aar:
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <aar alias>:libs/<lib file>.aar
include $(BUILD_MULTI_PREBUILT)

开发

IDE

https://www.jianshu.com/p/a19dcb06cd53

mmm development/tools/idegen
development/tools/idegen/idegen.sh

Android Build System

上一篇:快速排序算法理解


下一篇:Android_home配置环境变量