From 59b6fd541d1e5a418324afc188657423d7f7f23f Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Tue, 30 Oct 2018 18:24:06 +0000 Subject: [PATCH] Replace hidden API lists with a single CSV Combine existing hiddenapi-* txt files into a single CSV containing a list of all class members and their corresponding flags. Test: m, phone boots Change-Id: I67f1b5f331b262e9b681d9a3c78c9e4cbb5ea082 --- core/config.mk | 5 +---- core/definitions.mk | 36 +++++++++++------------------------- core/java.mk | 10 ++++------ core/soong_java_prebuilt.mk | 10 ++++------ 4 files changed, 20 insertions(+), 41 deletions(-) diff --git a/core/config.mk b/core/config.mk index 6b67e1a464..7f5f01622a 100644 --- a/core/config.mk +++ b/core/config.mk @@ -1202,10 +1202,7 @@ endif INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-public-list.txt INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-private-list.txt -INTERNAL_PLATFORM_HIDDENAPI_WHITELIST := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-whitelist.txt -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_FLAGS := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/hiddenapi-flags.csv 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 diff --git a/core/definitions.mk b/core/definitions.mk index 0d4b6c4921..55b109725e 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2374,10 +2374,7 @@ $(hide) \ endef appcompat-files = \ art/tools/veridex/appcompat.sh \ - $(INTERNAL_PLATFORM_HIDDENAPI_WHITELIST) \ - $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ - $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \ - $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) \ + $(INTERNAL_PLATFORM_HIDDENAPI_FLAGS) \ $(HOST_OUT_EXECUTABLES)/veridex \ $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/core_dex_intermediates/classes.dex \ $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/oahl_dex_intermediates/classes.dex @@ -2671,17 +2668,13 @@ endef # Java semantics of the result dex bytecode. Use at own risk. ifneq ($(UNSAFE_DISABLE_HIDDENAPI_FLAGS),true) define hiddenapi-copy-dex-files -$(2): $(1) $(HIDDENAPI) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ - $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) +$(2): $(1) $(HIDDENAPI) $(INTERNAL_PLATFORM_HIDDENAPI_FLAGS) @rm -rf $(dir $(2)) @mkdir -p $(dir $(2)) for INPUT_DEX in `find $(dir $(1)) -maxdepth 1 -name "classes*.dex" | sort`; do \ echo "--input-dex=$$$${INPUT_DEX}"; \ echo "--output-dex=$(dir $(2))/`basename $$$${INPUT_DEX}`"; \ - done | xargs $(HIDDENAPI) encode \ - --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ - --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \ - --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) + done | xargs $(HIDDENAPI) encode --api-flags=$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS) $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST): $(1) $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST): PRIVATE_DEX_INPUTS := $$(PRIVATE_DEX_INPUTS) $(1) @@ -2697,27 +2690,20 @@ endef endif # UNSAFE_DISABLE_HIDDENAPI_FLAGS # Generate a greylist.txt from a classes.jar -define hiddenapi-generate-greylist-txt +define hiddenapi-generate-csv ifneq (,$(wildcard frameworks/base)) # Only generate this target if we're in a tree with frameworks/base present. -$(3): .KATI_IMPLICIT_OUTPUTS := $(2) $(4) -# For now, write P & Q blacklist to single file until runtime support is finished +$(2): $(1) $(CLASS2GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) + $(CLASS2GREYLIST) --public-api-list $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) $(1) \ + --write-flags-csv $(2) + $(3): $(1) $(CLASS2GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) $(CLASS2GREYLIST) --public-api-list $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) $(1) \ - --write-whitelist $(2) \ - --write-greylist none,28:$(3) \ - --write-greylist 26:$(4) + --write-metadata-csv $(3) -$(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_FLAGS): $(2) +$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS): PRIVATE_FLAGS_INPUTS := $$(PRIVATE_FLAGS_INPUTS) $(2) -$(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) diff --git a/core/java.mk b/core/java.mk index 30571b7af9..932a4212a5 100644 --- a/core/java.mk +++ b/core/java.mk @@ -74,10 +74,8 @@ built_dex_intermediate := $(intermediates.COMMON)/dex/classes.dex built_dex_hiddenapi := $(intermediates.COMMON)/dex-hiddenapi/classes.dex full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar 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 +hiddenapi_flags_csv := $(intermediates.COMMON)/hiddenapi/flags.csv +hiddenapi_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. @@ -508,8 +506,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),$(hiddenapi_greylist_metadata_csv))) - LOCAL_INTERMEDIATE_TARGETS += $(hiddenapi_whitelist_txt) $(hiddenapi_greylist_txt) $(hiddenapi_darkgreylist_txt) $(hiddenapi_greylist_metadata_csv) + $(eval $(call hiddenapi-generate-csv, $(full_classes_pre_proguard_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) + LOCAL_INTERMEDIATE_TARGETS += $(hiddenapi_flags_csv) $(hiddenapi_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 3e6b261f39..1642ba7fb9 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -19,10 +19,8 @@ full_classes_jar := $(intermediates.COMMON)/classes.jar full_classes_pre_proguard_jar := $(intermediates.COMMON)/classes-pre-proguard.jar full_classes_header_jar := $(intermediates.COMMON)/classes-header.jar 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 +hiddenapi_flags_csv := $(intermediates.COMMON)/hiddenapi/flags.csv +hiddenapi_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))) @@ -80,7 +78,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),$(hiddenapi_greylist_metadata_csv))) + $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_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))) @@ -126,7 +124,7 @@ $(built_odex) : $(dir $(LOCAL_BUILT_MODULE))% : $(common_javalib.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),$(hiddenapi_greylist_metadata_csv))) + $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) endif $(eval $(call copy-one-file,$(full_classes_jar),$(LOCAL_BUILT_MODULE)))