From b8fa6dd104d758a32e08661b0f3315804a47d00d Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Mon, 29 Jan 2018 14:43:14 +0000 Subject: [PATCH] Revert "Revert "Apply hiddenapi build tool on boot jars"" This reverts commit 4a2926a44e5e9ff208f3a0290ebfc13bb6f26cfd. Reason for revert: The original CL caused two issues: 1) Increased app startup because `profman` failed to verify boot jars and created an empty profile for the boot image. All methods in the framework therefore ran interpreted/JITed. New flag "--skip-apk-verification" has been added to `profman` to fix the issue in CL Iad614e47feada293218c11cff985a8012ca49a0f. 2) Caused a crash in Mockito CTS tests because jvmti did not remove hiddenapi access flags from boot jars before using them. This has been fixed with CL Ibc9a96a6b541c06844f276db009ac29514f7a3bb. Bug: 64382372 Bug: 72550707 Test: make test-art-host Change-Id: Ie8c58714455662f042f56b2977b01b75c5ec7d2f --- core/config.mk | 1 + core/definitions.mk | 31 +++++++++++++++++++++++++++++++ core/dex_preopt_libart.mk | 1 + core/java.mk | 10 +++++++++- core/soong_java_prebuilt.mk | 6 +++++- 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/core/config.mk b/core/config.mk index d0a4af53c..69035599e 100644 --- a/core/config.mk +++ b/core/config.mk @@ -686,6 +686,7 @@ BRILLO_UPDATE_PAYLOAD := $(HOST_OUT_EXECUTABLES)/brillo_update_payload DEXDUMP := $(HOST_OUT_EXECUTABLES)/dexdump2$(BUILD_EXECUTABLE_SUFFIX) PROFMAN := $(HOST_OUT_EXECUTABLES)/profman +HIDDENAPI := $(HOST_OUT_EXECUTABLES)/hiddenapi # relocation packer RELOCATION_PACKER := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/relocation_packer/relocation_packer diff --git a/core/definitions.mk b/core/definitions.mk index 2be4f59fc..4eac01cce 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2808,6 +2808,37 @@ done \ fi endef +define hiddenapi-copy-dex-files +$(2): $(1) $(HIDDENAPI) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ + $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) + @rm -rf $(dir $(2)) + @mkdir -p $(dir $(2)) + find $(dir $(1)) -maxdepth 1 -name "classes*.dex" | sort | \ + xargs -I{} cp -f {} $(dir $(2)) + find $(dir $(2)) -name "classes*.dex" | sort | sed 's/^/--dex=/' | \ + xargs $(HIDDENAPI) --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ + --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \ + --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) +endef + +define hiddenapi-copy-soong-jar +$(2): PRIVATE_FOLDER := $(dir $(2))dex-hiddenapi +$(2): $(1) $(HIDDENAPI) $(SOONG_ZIP) $(MERGE_ZIPS) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ + $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) + @echo "Hidden API: $$@" + $$(copy-file-to-target) + @rm -rf $${PRIVATE_FOLDER} + @mkdir -p $${PRIVATE_FOLDER} + unzip -q $(2) 'classes*.dex' -d $${PRIVATE_FOLDER} + find $${PRIVATE_FOLDER} -name "classes*.dex" | sort | sed 's/^/--dex=/' | \ + xargs $(HIDDENAPI) --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \ + --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \ + --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST) + $(SOONG_ZIP) -o $${PRIVATE_FOLDER}/classes.dex.jar -C $${PRIVATE_FOLDER} -D $${PRIVATE_FOLDER} + $(MERGE_ZIPS) -D -zipToNotStrip $${PRIVATE_FOLDER}/classes.dex.jar -stripFile "classes*.dex" \ + $(2) $${PRIVATE_FOLDER}/classes.dex.jar $(1) +endef + ########################################################### ## Commands to call Proguard ########################################################### diff --git a/core/dex_preopt_libart.mk b/core/dex_preopt_libart.mk index af2355a4d..0fa4b8cc0 100644 --- a/core/dex_preopt_libart.mk +++ b/core/dex_preopt_libart.mk @@ -120,6 +120,7 @@ $(my_out_boot_image_profile_location): $(PROFMAN) $(LIBART_TARGET_BOOT_DEX_FILES @mkdir -p $(dir $@) ANDROID_LOG_TAGS="*:e" $(PROFMAN) \ --create-profile-from=$(PRIVATE_PROFILE_INPUT_LOCATION) \ + --skip-apk-verification \ $(addprefix --apk=,$(LIBART_TARGET_BOOT_DEX_FILES)) \ $(addprefix --dex-location=,$(LIBART_TARGET_BOOT_DEX_LOCATIONS)) \ --reference-profile-file=$@ diff --git a/core/java.mk b/core/java.mk index ee071c932..6f5dce4ce 100644 --- a/core/java.mk +++ b/core/java.mk @@ -73,6 +73,7 @@ full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar full_classes_proguard_jar := $(intermediates.COMMON)/classes-proguard.jar full_classes_combined_jar := $(intermediates.COMMON)/classes-combined.jar 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 @@ -762,7 +763,14 @@ else endif endif -$(built_dex): $(built_dex_intermediate) +ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),) # is_boot_jar + $(eval $(call hiddenapi-copy-dex-files,$(built_dex_intermediate),$(built_dex_hiddenapi))) + built_dex_copy_from := $(built_dex_hiddenapi) +else # !is_boot_jar + built_dex_copy_from := $(built_dex_intermediate) +endif # is_boot_jar + +$(built_dex): $(built_dex_copy_from) @echo Copying: $@ $(hide) mkdir -p $(dir $@) $(hide) rm -f $(dir $@)/classes*.dex diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index 6cf94229c..5c2d768bb 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -40,7 +40,11 @@ endif # TURBINE_DISABLED != false ifdef LOCAL_SOONG_DEX_JAR ifndef LOCAL_IS_HOST_MODULE - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) + ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),) # is_boot_jar + $(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))) + endif # is_boot_jar $(eval $(call add-dependency,$(common_javalib.jar),$(full_classes_jar) $(full_classes_header_jar))) dex_preopt_profile_src_file := $(common_javalib.jar)