Android.mk explanation
• Everything start from: build/core/main.mk
- FIND_LEAVES_EXCLUDES: 定义在build/core/config.mk中Android.mk的逻辑:
1. 排除.repo、.git和产物输出目录(默认为out)。 SCAN_EXCLUDE_DIRS默认为空,但可以通过参数传入、修改产品配置等方式设置。
2. 查找目录深度不限。
3. 如果父目录已经有Android.mk,不再查找子目录。
满足上述逻辑的Android.mk,都会被include到Android的Makefile中。
- 但是,其中定义的模块是否参与编译,则定义在 modules_to_install:
1. ALL_DEFAULT_INSTALLED_MODULES,从字面意思理解,系统默认的那些模块。
2. product_FILES,产品指定。 通过在产品配置中,指定PRODUCT_PACKAGES,可以进入这个列表。
3. tags_to_install,指定Tag。 比如,Tag为debug的模块,只在eng或userdebug的编译模式下才编译,在user模式下不编译。
4. CUSTOM_MODULES,自定义模块。 从实现上来讲,其实也是通过Tag来添加,但主要是支持mm、mmm这种单模块编译。 在模块未被添加到完整编译中时,在该模块的目录下执行mm,仍然可以强制编译,就是通过这里来指定的。
平台开发者要想把已经准备好Android.mk的模块,添加到编译中,只剩指定PRODUCT_PACKAGES.
• Android.mk description:
• LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
clear all LOCAL_* variables except LOCAL_PATH
• LOCAL_MODULE
就是模块名
如果该变量未设置,则使用LOCAL_PACKAGE_NAME
• LOCAL_MANIFEST_FILE可以指定AndroidManifest.xml的位置。 如果未设置,则默认使用Android.mk的相同路径下的AndroidManifest.xml文件。
• LOCAL_SRC_FILES是指定源文件列表
• include some build functions:
include 变量 | Makefile | 说明 |
---|---|---|
BUILD_HOST_STATIC_LIBRARY | host_static_library.mk | 编译主机上的静态库。 |
BUILD_HOST_SHARED_LIBRARY | host_shared_library.mk | 编译主机上的共享库。 |
BUILD_STATIC_LIBRARY | static_library.mk | 编译设备上的静态库。 |
BUILD_SHARED_LIBRARY | shared_library.mk | 编译设备上的共享库。 |
BUILD_EXECUTABLE | executable.mk | 编译设备上的可执行文件。 |
BUILD_HOST_EXECUTABLE | host_executable.mk | 编译主机上的可执行文件。 |
BUILD_PACKAGE | package.mk | 编译APK文件。 |
BUILD_PHONY_PACKAGE | phony_package.mk | 定义一个不能实际编译的虚假模块。可以指定依赖。 |
BUILD_HOST_PREBUILT | host_prebuilt.mk | 处理一个或多个主机上使用的已编译文件,该文件的实现依赖 multi_prebuilt.mk。 |
BUILD_PREBUILT | prebuilt.mk | 处理一个已经编译好的文件( 例如Jar包)。 |
BUILD_MULTI_PREBUILT | multi_prebuilt.mk | 处理一个或多个已编译文件,该文件的实现依赖prebuilt.mk。 |
BUILD_JAVA_LIBRARY | java_library.mk | 编译设备上的共享Java库。 |
BUILD_STATIC_JAVA_LIBRARY | static_java_library.mk | 编译设备上的静态Java库。 |
BUILD_HOST_JAVA_LIBRARY | host_java_library.mk | 编译主机上的共享Java库。 |
BUILD_DROIDDOC | droiddoc.mk | 编译生成droiddoc或javadoc文件。 |
BUILD_COPY_HEADERS | copy_headers.mk | 复制相关的头文件,被static_library.mk等文件使用,通常不直接include。 |
BUILD_NATIVE_TEST | native_test.mk | 编译设备上的可执行文件测试。 |
BUILD_NATIVE_BENCHMARK | native_benchmark.mk | 添加libbenchmark,编译设备上的可执行文件。 |
BUILD_HOST_NATIVE_TEST | host_native_test.mk | 主机上的可执行文件测试。 |
BUILD_SHARED_TEST_LIBRARY | shared_test_lib.mk | 设备上共享库的测试。 |
BUILD_HOST_SHARED_TEST_LIBRARY | host_shared_test_lib.mk | 主机上共享库的测试。 |
BUILD_STATIC_TEST_LIBRARY | static_test_lib.mk | 设备上静态库的测试。 |
BUILD_HOST_STATIC_TEST_LIBRARY | host_static_test_lib.mk | 主机上静态库的测试。 |
BUILD_NOTICE_FILE | notice_files.mk | 追踪、生成版权相关的NOTICE文件。 |
BUILD_HOST_DALVIK_JAVA_LIBRARY | host_dalvik_java_library.mk | 编译主机上的Dalvik共享Java库。 |
BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY | host_dalvik_static_java_library.mk | 编译主机上的Dalvik静态Java |