forked from openkylin/platform_build
Use a srcjar for aapt and aapt2 output
Dumping files in the *_intermediates/src causes incremental build
problems, because we don't know when to delete them if they are
no longer generated. Switch to outputting a srcjar instead, and
pass it in to the turbine and javac compiles.
Bug: 73885582
Test: m checkbuild
Change-Id: Ibef28507522339d930c09426d0c98372eb864cb6
Merged-In: Ibef28507522339d930c09426d0c98372eb864cb6
(cherry picked from commit 2d1cddd567
)
This commit is contained in:
parent
2ae710c29f
commit
f6d68cf6fe
|
@ -465,6 +465,11 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/compatibility_matrix.xml)
|
|||
|
||||
# Remove obsolete intermedates src files
|
||||
$(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/*/*_intermediates/src/RenderScript.stamp*)
|
||||
$(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS/*_intermediates/src)
|
||||
$(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/*_intermediates/src)
|
||||
$(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS/*_intermediates/java-source-list)
|
||||
$(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/*_intermediates/java-source-list)
|
||||
$(call add-clean-step, rm -rf $(OUT_DOCS)/*-timestamp)
|
||||
|
||||
# ************************************************
|
||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
||||
|
|
|
@ -78,12 +78,17 @@ ifneq ($(my_apk_split_configs),)
|
|||
$(my_res_package): PRIVATE_AAPT_FLAGS += $(addprefix --split ,$(join $(built_apk_splits),$(addprefix :,$(my_apk_split_configs))))
|
||||
endif
|
||||
|
||||
my_srcjar := $(intermediates.COMMON)/aapt2.srcjar
|
||||
LOCAL_SRCJARS += $(my_srcjar)
|
||||
|
||||
$(my_res_package): PRIVATE_RES_FLAT := $(my_res_resources_flat)
|
||||
$(my_res_package): PRIVATE_OVERLAY_FLAT := $(my_static_library_resources) $(my_resources_flata) $(my_overlay_resources_flat)
|
||||
$(my_res_package): PRIVATE_SHARED_ANDROID_LIBRARIES := $(my_shared_library_resources)
|
||||
$(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file)
|
||||
$(my_res_package): PRIVATE_ASSET_DIRS := $(my_asset_dirs)
|
||||
$(my_res_package): .KATI_IMPLICIT_OUTPUTS :=
|
||||
$(my_res_package): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt2
|
||||
$(my_res_package): PRIVATE_SRCJAR := $(my_srcjar)
|
||||
$(my_res_package): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar)
|
||||
|
||||
ifdef R_file_stamp
|
||||
$(my_res_package): PRIVATE_R_FILE_STAMP := $(R_file_stamp)
|
||||
|
@ -108,12 +113,12 @@ $(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_
|
|||
$(my_res_package): $(my_full_asset_paths)
|
||||
$(my_res_package): $(my_res_resources_flat) $(my_overlay_resources_flat) \
|
||||
$(my_resources_flata) $(my_static_library_resources) \
|
||||
$(AAPT2)
|
||||
$(AAPT2) $(SOONG_ZIP)
|
||||
@echo "AAPT2 link $@"
|
||||
$(call aapt2-link)
|
||||
ifdef R_file_stamp
|
||||
@rm -f $(PRIVATE_R_FILE_STAMP)
|
||||
$(call find-generated-R.java,$(PRIVATE_R_FILE_STAMP))
|
||||
$(call find-generated-R.java,$(PRIVATE_JAVA_GEN_DIR),$(PRIVATE_R_FILE_STAMP))
|
||||
endif
|
||||
ifdef LOCAL_EXPORT_PACKAGE_RESOURCES
|
||||
@rm -f $(PRIVATE_RESOURCE_EXPORT_PACKAGE)
|
||||
|
|
|
@ -2021,11 +2021,12 @@ AAPT_ASAN_OPTIONS := ASAN_OPTIONS=detect_leaks=0
|
|||
# This rule creates the R.java and Manifest.java files, both of which
|
||||
# are PRODUCT-neutral. Don't pass PRIVATE_PRODUCT_AAPT_CONFIG to this invocation.
|
||||
define create-resource-java-files
|
||||
@mkdir -p $(PRIVATE_SOURCE_INTERMEDIATES_DIR)
|
||||
@mkdir -p $(dir $(PRIVATE_RESOURCE_PUBLICS_OUTPUT))
|
||||
rm -rf $(PRIVATE_JAVA_GEN_DIR)
|
||||
mkdir -p $(PRIVATE_JAVA_GEN_DIR)
|
||||
$(hide) $(AAPT_ASAN_OPTIONS) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \
|
||||
$(eval # PRIVATE_PRODUCT_AAPT_CONFIG is intentionally missing-- see comment.) \
|
||||
$(addprefix -J , $(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \
|
||||
$(addprefix -J , $(PRIVATE_JAVA_GEN_DIR)) \
|
||||
$(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \
|
||||
$(addprefix -P , $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) \
|
||||
$(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \
|
||||
|
@ -2039,30 +2040,31 @@ $(hide) $(AAPT_ASAN_OPTIONS) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \
|
|||
$(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
|
||||
$(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
|
||||
--skip-symbols-without-default-localization
|
||||
$(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_GEN_DIR)
|
||||
# So that we re-run aapt when the list of input files change
|
||||
$(hide) echo $(PRIVATE_RESOURCE_LIST) >/dev/null
|
||||
endef
|
||||
|
||||
# Search for generated R.java/Manifest.java, copy the found R.java as $1.
|
||||
# Search for generated R.java/Manifest.java in $1, copy the found R.java as $2.
|
||||
# Also copy them to a central 'R' directory to make it easier to add the files to an IDE.
|
||||
define find-generated-R.java
|
||||
$(hide) for GENERATED_MANIFEST_FILE in `find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) \
|
||||
$(hide) for GENERATED_MANIFEST_FILE in `find $(1) \
|
||||
-name Manifest.java 2> /dev/null`; do \
|
||||
dir=`awk '/package/{gsub(/\./,"/",$$2);gsub(/;/,"",$$2);print $$2;exit}' $$GENERATED_MANIFEST_FILE`; \
|
||||
mkdir -p $(TARGET_COMMON_OUT_ROOT)/R/$$dir; \
|
||||
$(ACP) -fp $$GENERATED_MANIFEST_FILE $(TARGET_COMMON_OUT_ROOT)/R/$$dir; \
|
||||
done;
|
||||
$(hide) for GENERATED_R_FILE in `find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) \
|
||||
$(hide) for GENERATED_R_FILE in `find $(1) \
|
||||
-name R.java 2> /dev/null`; do \
|
||||
dir=`awk '/package/{gsub(/\./,"/",$$2);gsub(/;/,"",$$2);print $$2;exit}' $$GENERATED_R_FILE`; \
|
||||
mkdir -p $(TARGET_COMMON_OUT_ROOT)/R/$$dir; \
|
||||
$(ACP) -fp $$GENERATED_R_FILE $(TARGET_COMMON_OUT_ROOT)/R/$$dir \
|
||||
|| exit 31; \
|
||||
$(ACP) -fp $$GENERATED_R_FILE $1 || exit 32; \
|
||||
$(ACP) -fp $$GENERATED_R_FILE $(2) || exit 32; \
|
||||
done;
|
||||
@# Ensure that the target file is always created, i.e. also in case we did not
|
||||
@# enter the GENERATED_R_FILE-loop above. This avoids unnecessary rebuilding.
|
||||
$(hide) touch $1
|
||||
$(hide) touch $(2)
|
||||
endef
|
||||
|
||||
###########################################################
|
||||
|
@ -2110,6 +2112,8 @@ endef
|
|||
|
||||
define aapt2-link
|
||||
@mkdir -p $(dir $@)
|
||||
rm -rf $(PRIVATE_JAVA_GEN_DIR)
|
||||
mkdir -p $(PRIVATE_JAVA_GEN_DIR)
|
||||
$(call dump-words-to-file,$(PRIVATE_RES_FLAT),$(dir $@)aapt2-flat-list)
|
||||
$(call dump-words-to-file,$(PRIVATE_OVERLAY_FLAT),$(dir $@)aapt2-flat-overlay-list)
|
||||
$(hide) $(AAPT2) link -o $@ \
|
||||
|
@ -2118,7 +2122,7 @@ $(hide) $(AAPT2) link -o $@ \
|
|||
$(addprefix -I ,$(PRIVATE_AAPT_INCLUDES)) \
|
||||
$(addprefix -I ,$(PRIVATE_SHARED_ANDROID_LIBRARIES)) \
|
||||
$(addprefix -A ,$(PRIVATE_ASSET_DIR)) \
|
||||
$(addprefix --java ,$(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \
|
||||
$(addprefix --java ,$(PRIVATE_JAVA_GEN_DIR)) \
|
||||
$(addprefix --proguard ,$(PRIVATE_PROGUARD_OPTIONS_FILE)) \
|
||||
$(addprefix --min-sdk-version ,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
||||
$(addprefix --target-sdk-version ,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \
|
||||
|
@ -2131,6 +2135,7 @@ $(hide) $(AAPT2) link -o $@ \
|
|||
$(addprefix --rename-instrumentation-target-package ,$(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
|
||||
-R \@$(dir $@)aapt2-flat-overlay-list \
|
||||
\@$(dir $@)aapt2-flat-list
|
||||
$(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_GEN_DIR)
|
||||
endef
|
||||
|
||||
###########################################################
|
||||
|
|
|
@ -373,6 +373,11 @@ ifdef LOCAL_USE_AAPT2
|
|||
include $(BUILD_SYSTEM)/aapt2.mk
|
||||
else # LOCAL_USE_AAPT2
|
||||
|
||||
my_srcjar := $(intermediates.COMMON)/aapt.srcjar
|
||||
LOCAL_SRCJARS += $(my_srcjar)
|
||||
$(R_file_stamp): PRIVATE_SRCJAR := $(my_srcjar)
|
||||
$(R_file_stamp): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt
|
||||
$(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar)
|
||||
# Since we don't know where the real R.java file is going to end up,
|
||||
# we need to use another file to stand in its place. We'll just
|
||||
# copy the generated file to src/R.stamp, which means it will
|
||||
|
@ -386,11 +391,11 @@ else # LOCAL_USE_AAPT2
|
|||
$(intermediates.COMMON)/public_resources.xml
|
||||
$(R_file_stamp): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file)
|
||||
$(R_file_stamp): PRIVATE_RESOURCE_LIST := $(all_res_assets)
|
||||
$(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT) | $(ACP)
|
||||
$(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT) $(SOONG_ZIP) | $(ACP)
|
||||
@echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)"
|
||||
@rm -rf $@ && mkdir -p $(dir $@)
|
||||
$(create-resource-java-files)
|
||||
$(call find-generated-R.java,$@)
|
||||
$(call find-generated-R.java,$(PRIVATE_JAVA_GEN_DIR),$@)
|
||||
|
||||
$(proguard_options_file): $(R_file_stamp)
|
||||
|
||||
|
|
|
@ -135,9 +135,6 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_AAPT_CHARACTERISTICS := $(TARGET_A
|
|||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR)
|
||||
|
||||
# LOCAL_INTERMEDIATE_SOURCE_DIR is set later by java.mk, but we need it for AAPT
|
||||
LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
|
||||
|
||||
# add --non-constant-id to prevent inlining constants.
|
||||
# AAR needs text symbol file R.txt.
|
||||
ifdef LOCAL_USE_AAPT2
|
||||
|
@ -150,9 +147,14 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PRODUCT_AAPT_PREF_CONFIG :=
|
|||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_AAPT_CHARACTERISTICS :=
|
||||
else
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(intermediates.COMMON)
|
||||
|
||||
my_srcjar := $(intermediates.COMMON)/aapt.srcjar
|
||||
LOCAL_SRCJARS += $(my_srcjar)
|
||||
$(R_file_stamp): PRIVATE_SRCJAR := $(my_srcjar)
|
||||
$(R_file_stamp): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt
|
||||
$(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(intermediates.COMMON)/R.txt) $(my_srcjar)
|
||||
endif
|
||||
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml
|
||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR)
|
||||
|
@ -175,12 +177,13 @@ ifdef LOCAL_USE_AAPT2
|
|||
$(my_res_package) : $(framework_res_package_export)
|
||||
$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(intermediates.COMMON)/R.txt
|
||||
else
|
||||
$(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(intermediates.COMMON)/R.txt
|
||||
$(R_file_stamp): .KATI_IMPLICIT_OUTPUTS += $(intermediates.COMMON)/R.txt
|
||||
$(R_file_stamp): PRIVATE_RESOURCE_LIST := $(all_resources)
|
||||
$(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(framework_res_package_export) $(rs_generated_res_zip)
|
||||
$(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(SOONG_ZIP) \
|
||||
$(framework_res_package_export) $(rs_generated_res_zip)
|
||||
@echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)"
|
||||
$(create-resource-java-files)
|
||||
$(hide) find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name R.java | xargs cat > $@
|
||||
$(hide) find $(PRIVATE_JAVA_GEN_DIR) -name R.java | xargs cat > $@
|
||||
endif # LOCAL_USE_AAPT2
|
||||
|
||||
endif # need_compile_res
|
||||
|
|
Loading…
Reference in New Issue