From d9d5c2a95e02cfdbf1737ea2bf78b8a9d7b5f5bf Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 23 Jun 2023 16:17:54 -0700 Subject: [PATCH] Support transitive resource packages from Soong Soong is improving resource handling by not squashing resources from all dependencies into every android_library. This causes problems when the android_library is exported to Make, as Make is still using the old squashing behavior. Add a file to every static java library that lists the resource packages of its transitive dependencies. For modules defined in Andorid.mk files leave the file empty, but for Soong modules populate it with the list of transtiive dependencies. Pass the contents all of the files from direct dependencies to aapt2 link to include any transitive dependencies. Bug: 284023594 Test: m Dialer Change-Id: I4e8ace497d701a9645a62dd5a6ac12e9a6830dcf Merged-In: I4e8ace497d701a9645a62dd5a6ac12e9a6830dcf --- core/aapt2.mk | 5 ++++- core/clear_vars.mk | 1 + core/definitions.mk | 2 ++ core/soong_java_prebuilt.mk | 11 +++++++++++ core/static_java_library.mk | 6 ++++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/aapt2.mk b/core/aapt2.mk index 7b17df4a9c..0e23477967 100644 --- a/core/aapt2.mk +++ b/core/aapt2.mk @@ -68,6 +68,8 @@ $(my_res_resources_flat) $(my_overlay_resources_flat) $(my_resources_flata) $(my # support for it. my_static_library_resources := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/package-res.apk) +my_static_library_transitive_resource_packages_lists := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ + $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/transitive-res-packages) my_static_library_extra_packages := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/extra_packages) my_shared_library_resources := $(foreach l, $(LOCAL_SHARED_ANDROID_LIBRARIES),\ @@ -95,6 +97,7 @@ $(my_res_package): PRIVATE_ASSET_DIRS := $(my_asset_dirs) $(my_res_package): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt2 $(my_res_package): PRIVATE_SRCJAR := $(my_srcjar) $(my_res_package): PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES := $(my_static_library_extra_packages) +$(my_res_package): PRIVATE_STATIC_LIBRARY_TRANSITIVE_RES_PACKAGES_LISTS := $(my_static_library_transitive_resource_packages_lists) $(my_res_package): PRIVATE_AAPT_EXTRA_PACKAGES := $(aapt_extra_packages) $(my_res_package): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar) $(aapt_extra_packages) @@ -117,7 +120,7 @@ ifdef proguard_options_file $(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(proguard_options_file) endif -$(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_shared_library_resources) +$(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_static_library_transitive_resource_packages_lists) $(my_shared_library_resources) $(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) $(my_static_library_extra_packages) \ diff --git a/core/clear_vars.mk b/core/clear_vars.mk index bb7ba1b377..ef3263aeb0 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -297,6 +297,7 @@ LOCAL_SOONG_MODULE_TYPE := LOCAL_SOONG_PROGUARD_DICT := LOCAL_SOONG_PROGUARD_USAGE_ZIP := LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE := +LOCAL_SOONG_TRANSITIVE_RES_PACKAGES := LOCAL_SOONG_DEVICE_RRO_DIRS := LOCAL_SOONG_PRODUCT_RRO_DIRS := LOCAL_SOONG_STATIC_LIBRARY_EXTRA_PACKAGES := diff --git a/core/definitions.mk b/core/definitions.mk index be40584e5f..bb81e2dcb4 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2377,6 +2377,7 @@ 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) +cat $(PRIVATE_STATIC_LIBRARY_TRANSITIVE_RES_PACKAGES_LISTS) | sort -u | tr '\n' ' ' > $(dir $@)aapt2-transitive-overlay-list $(hide) $(AAPT2) link -o $@ \ $(PRIVATE_AAPT_FLAGS) \ $(if $(PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES),$$(cat $(PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES))) \ @@ -2396,6 +2397,7 @@ $(hide) $(AAPT2) link -o $@ \ $(addprefix --rename-manifest-package ,$(PRIVATE_MANIFEST_PACKAGE_NAME)) \ $(addprefix --rename-instrumentation-target-package ,$(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ -R \@$(dir $@)aapt2-flat-overlay-list \ + -R \@$(dir $@)aapt2-transitive-overlay-list \ \@$(dir $@)aapt2-flat-list $(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_GEN_DIR) $(EXTRACT_JAR_PACKAGES) -i $(PRIVATE_SRCJAR) -o $(PRIVATE_AAPT_EXTRA_PACKAGES) --prefix '--extra-packages ' diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index a8f475fd9a..c7c6a119dd 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -99,6 +99,17 @@ ifdef LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE $(call add-dependency,$(LOCAL_BUILT_MODULE),$(my_res_package)) + my_transitive_res_packages := $(intermediates.COMMON)/transitive-res-packages + $(my_transitive_res_packages): PRIVATE_TRANSITIVE_RES_PACKAGES := $(filter-out $(LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE),$(LOCAL_SOONG_TRANSITIVE_RES_PACKAGES)) + $(my_transitive_res_packages): + @echo Write transitive resource package list $@ + rm -f $@ + touch $@ + $(foreach f,$(PRIVATE_TRANSITIVE_RES_PACKAGES),\ + echo "$f" >> $@; ) + + $(call add-dependency,$(my_res_package),$(my_transitive_res_packages)) + my_proguard_flags := $(intermediates.COMMON)/export_proguard_flags $(my_proguard_flags): $(LOCAL_SOONG_EXPORT_PROGUARD_FLAGS) @echo "Export proguard flags: $@" diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 4053985a3a..4a72a1fc31 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -127,6 +127,12 @@ framework_res_package_export := \ endif endif +# transitive-res-packages is only populated for Soong modules for now, but needs +# to exist so that other Make modules can depend on it. Create an empty file. +my_transitive_res_packages := $(intermediates.COMMON)/transitive-res-packages +$(my_transitive_res_packages): + touch $@ + import_proguard_flag_files := $(strip $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags)) $(intermediates.COMMON)/export_proguard_flags: $(import_proguard_flag_files) $(addprefix $(LOCAL_PATH)/,$(LOCAL_EXPORT_PROGUARD_FLAG_FILES))