From 8c96298a923a9d48e9340bfcfaa82f1dd8c25ea1 Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Fri, 5 Oct 2018 14:01:17 +0100 Subject: [PATCH] Write greylist annotation metadata to a csv file. Also add support for merging these into a single file elsewhere in the build. Test: m, inspect generated greylist.csv Bug: 117314178 Change-Id: If28110fc1ed090222e55c274e8363110753d10f1 --- core/config.mk | 1 + core/definitions.mk | 8 ++++++++ core/java.mk | 5 +++-- core/soong_java_prebuilt.mk | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/config.mk b/core/config.mk index b9174b3eb..f5973c52e 100644 --- a/core/config.mk +++ b/core/config.mk @@ -1169,6 +1169,7 @@ INTERNAL_PLATFORM_HIDDENAPI_WHITELIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACK INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-light-greylist.txt INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-dark-greylist.txt INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-blacklist.txt +INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-greylist.csv # Missing optional uses-libraries so that the platform doesn't create build rules that depend on # them. See setup_one_odex.mk. diff --git a/core/definitions.mk b/core/definitions.mk index 5a14826e1..3538166d3 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2708,12 +2708,20 @@ $(3): $(1) $(CLASS2GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) --write-greylist $(3) \ --write-greylist 26,28:$(4) +$(5): $(1) $(CLASS2GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) + $(CLASS2GREYLIST) --public-api-list $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) $(1) \ + --write-metadata-csv $(5) + $(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST): $(2) $(3) $(4) $(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST): \ PRIVATE_WHITELIST_INPUTS := $$(PRIVATE_WHITELIST_INPUTS) $(2) $(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST): \ PRIVATE_GREYLIST_INPUTS := $$(PRIVATE_GREYLIST_INPUTS) $(3) PRIVATE_DARKGREYLIST_INPUTS := $$(PRIVATE_DARKGREYLIST_INPUTS) $(4) +$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): $(5) +$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): \ + PRIVATE_METADATA_INPUTS := $$(PRIVATE_METADATA_INPUTS) $(5) + endif endef diff --git a/core/java.mk b/core/java.mk index c015e4ac3..30571b7af 100644 --- a/core/java.mk +++ b/core/java.mk @@ -77,6 +77,7 @@ java_source_list_file := $(intermediates.COMMON)/java-source-list hiddenapi_whitelist_txt := $(intermediates.COMMON)/hiddenapi/whitelist.txt hiddenapi_greylist_txt := $(intermediates.COMMON)/hiddenapi/greylist.txt hiddenapi_darkgreylist_txt := $(intermediates.COMMON)/hiddenapi/darkgreylist.txt +hiddenapi_greylist_metadata_csv := $(intermediates.COMMON)/hiddenapi/greylist.csv ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS) # If this is an apk without any Java code (e.g. framework-res), we should skip compiling Java. @@ -507,8 +508,8 @@ ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),) # is_boot_jar # dex later on. The difference is academic currently, as we don't proguard any # bootclasspath code at the moment. If we were to do that, we should add keep # rules for all members with the @UnsupportedAppUsage annotation. - $(eval $(call hiddenapi-generate-greylist-txt, $(full_classes_pre_proguard_jar),$(hiddenapi_whitelist_txt),$(hiddenapi_greylist_txt),$(hiddenapi_darkgreylist_txt))) - LOCAL_INTERMEDIATE_TARGETS += $(hiddenapi_whitelist_txt) $(hiddenapi_greylist_txt) $(hiddenapi_darkgreylist_txt) + $(eval $(call hiddenapi-generate-greylist-txt, $(full_classes_pre_proguard_jar),$(hiddenapi_whitelist_txt),$(hiddenapi_greylist_txt),$(hiddenapi_darkgreylist_txt),$(hiddenapi_greylist_metadata_csv))) + LOCAL_INTERMEDIATE_TARGETS += $(hiddenapi_whitelist_txt) $(hiddenapi_greylist_txt) $(hiddenapi_darkgreylist_txt) $(hiddenapi_greylist_metadata_csv) $(eval $(call hiddenapi-copy-dex-files,$(built_dex_intermediate),$(built_dex_hiddenapi))) built_dex_copy_from := $(built_dex_hiddenapi) else # !is_boot_jar diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index 18a09fb87..20bfc662a 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -22,6 +22,7 @@ common_javalib.jar := $(intermediates.COMMON)/javalib.jar hiddenapi_whitelist_txt := $(intermediates.COMMON)/hiddenapi/whitelist.txt hiddenapi_greylist_txt := $(intermediates.COMMON)/hiddenapi/greylist.txt hiddenapi_darkgreylist_txt := $(intermediates.COMMON)/hiddenapi/darkgreylist.txt +hiddenapi_greylist_metadata_csv := $(intermediates.COMMON)/hiddenapi/greylist.csv $(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(full_classes_jar))) $(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(full_classes_pre_proguard_jar))) @@ -79,7 +80,7 @@ ifdef LOCAL_SOONG_DEX_JAR # We use full_classes_jar here, which is the post-proguard jar (on the basis that we also # have a full_classes_pre_proguard_jar). This is consistent with the equivalent code in # java.mk. - $(eval $(call hiddenapi-generate-greylist-txt,$(full_classes_jar),$(hiddenapi_whitelist_txt),$(hiddenapi_greylist_txt),$(hiddenapi_darkgreylist_txt))) + $(eval $(call hiddenapi-generate-greylist-txt,$(full_classes_jar),$(hiddenapi_whitelist_txt),$(hiddenapi_greylist_txt),$(hiddenapi_darkgreylist_txt),$(hiddenapi_greylist_metadata_csv))) $(eval $(call hiddenapi-copy-soong-jar,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) else # !is_boot_jar $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar)))