Android.mk explanation

来自个人维基
2021年9月6日 (一) 15:23free6d1823讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

• 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

Ref:https://note.qidong.name/2017/08/android-mk/