注意,ALL_DEFAULT_INSTALLED_MODULES描述的文件除了在build/core/main.mk文件中定义的模块文件之外,还包含以下这些文件: 1. 通过PRODUCT_COPY_FILES定义的要拷贝到目标设备上去的文件
[plain] view plain copy
![]() ![]()
- unique_product_copy_files_pairs :=
- $(foreach cf,$(PRODUCT_COPY_FILES), \
- $(if $(filter $(unique_product_copy_files_pairs),$(cf)),,\
- $(eval unique_product_copy_files_pairs += $(cf))))
- unique_product_copy_files_destinati** :=
- $(foreach cf,$(unique_product_copy_files_pairs), \
- $(eval _src := $(call word-colon,1,$(cf))) \
- $(eval _dest := $(call word-colon,2,$(cf))) \
- $(call check-product-copy-files,$(cf)) \
- $(if $(filter $(unique_product_copy_files_destinati**),$(_dest)), \
- $(info PRODUCT_COPY_FILES $(cf) ignored.), \
- $(eval _fulldest := $(call append-path,$(PRODUCT_OUT),$(_dest))) \
- $(if $(filter %.xml,$(_dest)),\
- $(eval $(call copy-xml-file-checked,$(_src),$(_fulldest))),\
- $(eval $(call copy-one-file,$(_src),$(_fulldest)))) \
- <span style="color:#FF0000;"><strong>$(eval ALL_DEFAULT_INSTALLED_MODULES += $(_fulldest)) \</strong></span>
- $(eval unique_product_copy_files_destinati** += $(_dest))))
2. 由ADDITIONAL_DEFAULT_PROPERTIES定义的属性所组成的default.prop文件
[plain] view plain copy
![]() ![]()
- INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop
- <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)</strong></span>
- ADDITIONAL_DEFAULT_PROPERTIES := \
- $(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))
- ADDITIONAL_DEFAULT_PROPERTIES += \
- $(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))
- ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \
- $(ADDITIONAL_DEFAULT_PROPERTIES),=)
-
- $(INSTALLED_DEFAULT_PROP_TARGET):
- @echo Target buildinfo: $@
- @mkdir -p $(dir $@)
- $(hide) echo "#" > $@; \
- echo "# ADDITIONAL_DEFAULT_PROPERTIES" >> $@; \
- echo "#" >> $@;
- $(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \
- echo "$(line)" >> $@;)
- build/tools/post_process_props.py $@
3. 由ADDITIONAL_BUILD_PROPERTIES等定义的属性所组成的build.prop文件
[plain] view plain copy
![]() ![]()
- INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
- <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BUILD_PROP_TARGET)</strong></span>
- ADDITIONAL_BUILD_PROPERTIES := \
- $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))
- ADDITIONAL_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \
- $(ADDITIONAL_BUILD_PROPERTIES),=)
- ......
- BUILDINFO_SH := build/tools/buildinfo.sh
- $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
- @echo Target buildinfo: $@
- @mkdir -p $(dir $@)
- $(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \
- TARGET_DEVICE="$(TARGET_DEVICE)" \
- PRODUCT_NAME="$(TARGET_PRODUCT)" \
- PRODUCT_BRAND="$(PRODUCT_BRAND)" \
- PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \
- PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \
- PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \
- PRODUCT_MODEL="$(PRODUCT_MODEL)" \
- PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \
- PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \
- BUILD_ID="$(BUILD_ID)" \
- BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
- BUILD_NUMBER="$(BUILD_NUMBER)" \
- PLATFORM_VERSION="$(PLATFORM_VERSION)" \
- PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \
- PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \
- BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \
- TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \
- BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \
- TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \
- TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \
- TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \
- TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \
- bash $(BUILDINFO_SH) > $@
- $(hide) if [ -f $(TARGET_DEVICE_DIR)/system.prop ]; then \
- cat $(TARGET_DEVICE_DIR)/system.prop >> $@; \
- fi
- $(if $(ADDITIONAL_BUILD_PROPERTIES), \
- $(hide) echo >> $@; \
- echo "#" >> $@; \
- echo "# ADDITIONAL_BUILD_PROPERTIES" >> $@; \
- echo "#" >> $@; )
- $(hide) $(foreach line,$(ADDITIONAL_BUILD_PROPERTIES), \
- echo "$(line)" >> $@;)
- $(hide) build/tools/post_process_props.py $@
4. 用来描述event类型日志格式的event-log-tags文件
[plain] view plain copy
![]() ![]()
- all_event_log_tags_file := $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt
-
- event_log_tags_file := $(TARGET_OUT)/etc/event-log-tags
-
- # Include tags from all packages that we know about
- all_event_log_tags_src := \
- $(sort $(foreach m, $(ALL_MODULES), $(ALL_MODULES.$(m).EVENT_LOG_TAGS)))
-
- # PDK builds will already have a full list of tags that needs to get merged
- # in with the ones from source
- pdk_fusion_log_tags_file := $(patsubst $(PRODUCT_OUT)/%,$(_pdk_fusion_intermediates)/%,$(filter $(event_log_tags_file),$(ALL_PDK_FUSION_FILES)))
-
- $(all_event_log_tags_file): PRIVATE_SRC_FILES := $(all_event_log_tags_src) $(pdk_fusion_log_tags_file)
- $(hide) mkdir -p $(dir $@)
- $(hide) build/tools/merge-event-log-tags.py -o $@ $(PRIVATE_SRC_FILES)
-
- # Include tags from all packages included in this product, plus all
- # tags that are part of the system (ie, not in a vendor/ or device/
- # directory).
- event_log_tags_src := \
- $(sort $(foreach m,\
- $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) \
- $(call module-names-for-tag-list,user), \
- $(ALL_MODULES.$(m).EVENT_LOG_TAGS)) \
- $(filter-out vendor/% device/% out/%,$(all_event_log_tags_src)))
-
- $(event_log_tags_file): PRIVATE_SRC_FILES := $(event_log_tags_src) $(pdk_fusion_log_tags_file)
- $(event_log_tags_file): PRIVATE_MERGED_FILE := $(all_event_log_tags_file)
- $(event_log_tags_file): $(event_log_tags_src) $(all_event_log_tags_file) $(pdk_fusion_log_tags_file)
- $(hide) mkdir -p $(dir $@)
- $(hide) build/tools/merge-event-log-tags.py -o $@ -m $(PRIVATE_MERGED_FILE) $(PRIVATE_SRC_FILES)
-
- event-log-tags: $(event_log_tags_file)
-
- <strong><span style="color:#FF0000;">ALL_DEFAULT_INSTALLED_MODULES += $(event_log_tags_file)</span></strong>
关于Android系统的event日志,可以参考Android日志系统驱动程序Logger源代码分析、Android应用程序框架层和系统运行库层日志系统源代码分析和Android日志系统Logcat源代码简要分析这个系列的文章。
5. 由于使用了BSD、GPL和Apache许可的模块而必须在发布时附带的Notice文件
[plain] view plain copy
![]() ![]()
- target_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE.txt
- target_notice_file_html := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html
- target_notice_file_html_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE.html.gz
- tools_notice_file_txt := $(HOST_OUT_INTERMEDIATES)/NOTICE.txt
- tools_notice_file_html := $(HOST_OUT_INTERMEDIATES)/NOTICE.html
-
- kernel_notice_file := $(TARGET_OUT_NOTICE_FILES)/src/kernel.txt
- pdk_fusion_notice_files := $(filter $(TARGET_OUT_NOTICE_FILES)/%, $(ALL_PDK_FUSION_FILES))
- ......
- # Install the html file at /system/etc/NOTICE.html.gz.
- # This is not ideal, but this is very late in the game, after a lot of
- # the module processing has already been done -- in fact, we used the
- # fact that all that has been done to get the list of modules that we
- # need notice files for.
- $(target_notice_file_html_gz): $(target_notice_file_html) | $(MINIGZIP)
- $(hide) $(MINIGZIP) -9 < $< > $@
- installed_notice_html_gz := $(TARGET_OUT)/etc/NOTICE.html.gz
- $(installed_notice_html_gz): $(target_notice_file_html_gz) | $(ACP)
- $(copy-file-to-target)
-
- # if we've been run my mm, mmm, etc, don't reinstall this every time
- ifeq ($(ONE_SHOT_MAKEFILE),)
- <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_gz)</strong></span>
- endif
6. 用来验证OTA更新的ZS文件
[plain] view plain copy
![]() ![]()
- <span style="color:#FF0000;"><strong>ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/security/otacerts.zip</strong></span>
- $(TARGET_OUT_ETC)/security/otacerts.zip: KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)
- $(TARGET_OUT_ETC)/security/otacerts.zip: $(addsuffix .x509.pem,$(DEFAULT_KEY_CERT_PAIR))
- $(hide) rm -f $@
- $(hide) mkdir -p $(dir $@)
- $(hide) zip -qj $@ $<
-
- .PHONY: otacerts
- otacerts: $(TARGET_OUT_ETC)/security/otacerts.zip
|