“Android.mk explanation”的版本间的差异
free6d1823(讨论 | 贡献) (以“• Everything start from: build/core/main.mk - FIND_LEAVES_EXCLUDES: 定义在build/core/config.mk中Android.mk的逻辑: 1. 排除.repo、.git和产物...”为内容创建页面) |
free6d1823(讨论 | 贡献) |
||
第30行: | 第30行: | ||
• LOCAL_SRC_FILES是指定源文件列表 | • LOCAL_SRC_FILES是指定源文件列表 | ||
• include some build functions: | • include some build functions: | ||
− | + | {| class="wikitable" style="width:25%" | |
− | include 变量 Makefile 说明 | + | ! include 变量 !! Makefile !! 说明 |
− | BUILD_HOST_STATIC_LIBRARY host_static_library.mk 编译主机上的静态库。 | + | |- |
− | BUILD_HOST_SHARED_LIBRARY host_shared_library.mk | + | || BUILD_HOST_STATIC_LIBRARY ||host_static_library.mk || 编译主机上的静态库。 |
− | BUILD_STATIC_LIBRARY static_library.mk 编译设备上的静态库。 | + | |- |
− | BUILD_SHARED_LIBRARY shared_library.mk 编译设备上的共享库。 | + | ||BUILD_HOST_SHARED_LIBRARY ||host_shared_library.mk || 编译主机上的共享库。 |
− | BUILD_EXECUTABLE executable.mk 编译设备上的可执行文件。 | + | |- |
− | BUILD_HOST_EXECUTABLE host_executable.mk 编译主机上的可执行文件。 | + | ||BUILD_STATIC_LIBRARY ||static_library.mk ||编译设备上的静态库。 |
− | + | |- | |
− | BUILD_PACKAGE package.mk 编译APK文件。 | + | ||BUILD_SHARED_LIBRARY ||shared_library.mk ||编译设备上的共享库。 |
− | BUILD_PHONY_PACKAGE phony_package.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_HOST_PREBUILT host_prebuilt.mk 处理一个或多个主机上使用的已编译文件,该文件的实现依赖 multi_prebuilt.mk。 | ||
+ | |- | ||
BUILD_PREBUILT prebuilt.mk 处理一个已经编译好的文件( 例如Jar包)。 | BUILD_PREBUILT prebuilt.mk 处理一个已经编译好的文件( 例如Jar包)。 | ||
+ | |- | ||
BUILD_MULTI_PREBUILT multi_prebuilt.mk 处理一个或多个已编译文件,该文件的实现依赖prebuilt.mk。 | BUILD_MULTI_PREBUILT multi_prebuilt.mk 处理一个或多个已编译文件,该文件的实现依赖prebuilt.mk。 | ||
+ | |- | ||
BUILD_JAVA_LIBRARY java_library.mk 编译设备上的共享Java库。 | BUILD_JAVA_LIBRARY java_library.mk 编译设备上的共享Java库。 | ||
+ | |- | ||
BUILD_STATIC_JAVA_LIBRARY static_java_library.mk 编译设备上的静态Java库。 | BUILD_STATIC_JAVA_LIBRARY static_java_library.mk 编译设备上的静态Java库。 | ||
+ | |- | ||
BUILD_HOST_JAVA_LIBRARY host_java_library.mk 编译主机上的共享Java库。 | BUILD_HOST_JAVA_LIBRARY host_java_library.mk 编译主机上的共享Java库。 | ||
+ | |- | ||
BUILD_DROIDDOC droiddoc.mk 编译生成droiddoc或javadoc文件。 | BUILD_DROIDDOC droiddoc.mk 编译生成droiddoc或javadoc文件。 | ||
+ | |- | ||
BUILD_COPY_HEADERS copy_headers.mk 复制相关的头文件,被static_library.mk等文件使用,通常不直接include。 | BUILD_COPY_HEADERS copy_headers.mk 复制相关的头文件,被static_library.mk等文件使用,通常不直接include。 | ||
+ | |- | ||
BUILD_NATIVE_TEST native_test.mk 编译设备上的可执行文件测试。 | BUILD_NATIVE_TEST native_test.mk 编译设备上的可执行文件测试。 | ||
+ | |- | ||
BUILD_NATIVE_BENCHMARK native_benchmark.mk 添加libbenchmark,编译设备上的可执行文件。 | BUILD_NATIVE_BENCHMARK native_benchmark.mk 添加libbenchmark,编译设备上的可执行文件。 | ||
+ | |- | ||
BUILD_HOST_NATIVE_TEST host_native_test.mk 主机上的可执行文件测试。 | BUILD_HOST_NATIVE_TEST host_native_test.mk 主机上的可执行文件测试。 | ||
+ | |- | ||
BUILD_SHARED_TEST_LIBRARY shared_test_lib.mk 设备上共享库的测试。 | BUILD_SHARED_TEST_LIBRARY shared_test_lib.mk 设备上共享库的测试。 | ||
+ | |- | ||
BUILD_HOST_SHARED_TEST_LIBRARY host_shared_test_lib.mk 主机上共享库的测试。 | BUILD_HOST_SHARED_TEST_LIBRARY host_shared_test_lib.mk 主机上共享库的测试。 | ||
+ | |- | ||
BUILD_STATIC_TEST_LIBRARY static_test_lib.mk 设备上静态库的测试。 | BUILD_STATIC_TEST_LIBRARY static_test_lib.mk 设备上静态库的测试。 | ||
+ | |- | ||
BUILD_HOST_STATIC_TEST_LIBRARY host_static_test_lib.mk 主机上静态库的测试。 | BUILD_HOST_STATIC_TEST_LIBRARY host_static_test_lib.mk 主机上静态库的测试。 | ||
+ | |- | ||
BUILD_NOTICE_FILE notice_files.mk 追踪、生成版权相关的NOTICE文件。 | BUILD_NOTICE_FILE notice_files.mk 追踪、生成版权相关的NOTICE文件。 | ||
+ | |- | ||
BUILD_HOST_DALVIK_JAVA_LIBRARY host_dalvik_java_library.mk 编译主机上的Dalvik共享Java库。 | 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 | BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY host_dalvik_static_java_library.mk 编译主机上的Dalvik静态Java | ||
− | + | |} | |
Ref:https://note.qidong.name/2017/08/android-mk/ | Ref:https://note.qidong.name/2017/08/android-mk/ |
2021年9月6日 (一) 15:36的版本
• 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 | 定义一个不能实际编译的虚假模块。可以指定依赖。 |