“Android.mk explanation”的版本间的差异
free6d1823(讨论 | 贡献) (以“• Everything start from: build/core/main.mk - FIND_LEAVES_EXCLUDES: 定义在build/core/config.mk中Android.mk的逻辑: 1. 排除.repo、.git和产物...”为内容创建页面) |
free6d1823(讨论 | 贡献) |
||
(未显示1个用户的2个中间版本) | |||
第29行: | 第29行: | ||
• LOCAL_MANIFEST_FILE可以指定AndroidManifest.xml的位置。 如果未设置,则默认使用Android.mk的相同路径下的AndroidManifest.xml文件。 | • LOCAL_MANIFEST_FILE可以指定AndroidManifest.xml的位置。 如果未设置,则默认使用Android.mk的相同路径下的AndroidManifest.xml文件。 | ||
• LOCAL_SRC_FILES是指定源文件列表 | • LOCAL_SRC_FILES是指定源文件列表 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | • some builtin functions can be included in Android.mk: | ||
+ | {| class="wikitable" style="width:25%" | ||
+ | ! 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/ | Ref:https://note.qidong.name/2017/08/android-mk/ |
2021年9月6日 (一) 15:41的最后版本
• 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是指定源文件列表
• some builtin functions can be included in Android.mk:
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 |