From 5c658ac3a978648e8501a55b0f0eeb004026f1a4 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Thu, 15 Feb 2018 13:19:38 -0800 Subject: [PATCH] Add property for generating dm files Added product property: PRODUCT_DEX_PREOPT_GENERATE_DM_FILES. If this property is true, APKs compiled as verify will have the dex files left compressed and the vdex put in a dm file. The vdex file and oat files are not copied to system partition in this case. Bug: 70934104 Test: manual Change-Id: Ie137e14f14642b803a506162de6db8ac65a43f46 --- core/dex_preopt_odex_install.mk | 63 ++++++++++++++++++++++++++------- core/product.mk | 1 + core/product_config.mk | 2 ++ 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk index 3a943bb75..2b2800bf6 100644 --- a/core/dex_preopt_odex_install.mk +++ b/core/dex_preopt_odex_install.mk @@ -139,8 +139,10 @@ $(my_built_profile): --dex-location=$(PRIVATE_DEX_LOCATION) \ --reference-profile-file=$@ dex_preopt_profile_src_file:= -# Remove compressed APK extension. + +# Remove compressed APK extension. my_installed_profile := $(patsubst %.gz,%,$(LOCAL_INSTALLED_MODULE)).prof + # my_installed_profile := $(LOCAL_INSTALLED_MODULE).prof $(eval $(call copy-one-file,$(my_built_profile),$(my_installed_profile))) build_installed_profile:=$(my_built_profile):$(my_installed_profile) @@ -244,12 +246,39 @@ ifeq (,$(filter --compiler-filter=%, $(LOCAL_DEX_PREOPT_FLAGS))) # For non system server jars, use speed-profile when we have a profile. LOCAL_DEX_PREOPT_FLAGS += --compiler-filter=speed-profile else - LOCAL_DEX_PREOPT_FLAGS += --compiler-filter=$(my_default_compiler_filter) + LOCAL_DEX_PREOPT_FLAGS += --compiler-filter=$(my_default_compiler_filter) endif endif endif endif +my_generate_dm := $(PRODUCT_DEX_PREOPT_GENERATE_DM_FILES) +ifeq (,$(filter $(LOCAL_DEX_PREOPT_FLAGS),--compiler-filter=verify)) +# Generating DM files only makes sense for verify, avoid doing for non verify compiler filter APKs. +my_generate_dm := false +endif + +# No reason to use a dm file if the dex is already uncompressed. +ifeq ($(LOCAL_UNCOMPRESS_DEX),true) +my_generate_dm := false +endif + +ifeq (true,$(my_generate_dm)) +LOCAL_DEX_PREOPT_FLAGS += --copy-dex-files=false +LOCAL_DEX_PREOPT := nostripping +my_built_dm := $(dir $(LOCAL_BUILT_MODULE))generated.dm +my_installed_dm := $(patsubst %.apk,%,$(LOCAL_INSTALLED_MODULE)).dm +my_copied_vdex := $(dir $(LOCAL_BUILT_MODULE))primary.vdex +$(eval $(call copy-one-file,$(built_vdex),$(my_copied_vdex))) +$(my_built_dm): PRIVATE_INPUT_VDEX := $(my_copied_vdex) +$(my_built_dm): $(my_copied_vdex) $(ZIPTIME) + $(hide) mkdir -p $(dir $@) + $(hide) rm -f $@ + $(hide) zip -qD -j -X -9 $@ $(PRIVATE_INPUT_VDEX) + $(ZIPTIME) $@ +$(eval $(call copy-one-file,$(my_built_dm),$(my_installed_dm))) +endif + # PRODUCT_SYSTEM_SERVER_DEBUG_INFO overrides WITH_DEXPREOPT_DEBUG_INFO. my_system_server_debug_info := $(PRODUCT_SYSTEM_SERVER_DEBUG_INFO) ifeq (,$(filter eng, $(TARGET_BUILD_VARIANT))) @@ -274,14 +303,26 @@ $(built_vdex): $(built_odex) $(built_art): $(built_odex) endif -# Add the installed_odex to the list of installed files for this module. -ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) -ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex) -ALL_MODULES.$(my_register_name).INSTALLED += $(installed_art) +ifneq (true,$(my_generate_dm)) + # Add the installed_odex to the list of installed files for this module if we aren't generating a + # dm file. + ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) + ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex) + ALL_MODULES.$(my_register_name).INSTALLED += $(installed_art) -ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex) -ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_vdex) -ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_art) + ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex) + ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_vdex) + ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_art) + + # Make sure to install the .odex and .vdex when you run "make " + $(my_all_targets): $(installed_odex) $(installed_vdex) $(installed_art) +else + ALL_MODULES.$(my_register_name).INSTALLED += $(my_installed_dm) + ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(my_built_dm) $(my_installed_dm) + + # Make sure to install the .dm when you run "make " + $(my_all_targets): $(installed_dm) +endif # Record dex-preopt config. DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT := $(LOCAL_DEX_PREOPT) @@ -295,10 +336,6 @@ DEXPREOPT.$(LOCAL_MODULE).INSTALLED_STRIPPED := $(LOCAL_INSTALLED_MODULE) DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS) := $(sort \ $(DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS)) $(LOCAL_MODULE)) - -# Make sure to install the .odex and .vdex when you run "make " -$(my_all_targets): $(installed_odex) $(installed_vdex) $(installed_art) - endif # LOCAL_DEX_PREOPT # Profile doesn't depend on LOCAL_DEX_PREOPT. diff --git a/core/product.mk b/core/product.mk index ce1485349..6cccebf21 100644 --- a/core/product.mk +++ b/core/product.mk @@ -134,6 +134,7 @@ _product_var_list := \ PRODUCT_DEX_PREOPT_BOOT_FLAGS \ PRODUCT_DEX_PREOPT_PROFILE_DIR \ PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION \ + PRODUCT_DEX_PREOPT_GENERATE_DM_FILES \ PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE \ PRODUCT_SYSTEM_SERVER_COMPILER_FILTER \ PRODUCT_SANITIZER_MODULE_CONFIGS \ diff --git a/core/product_config.mk b/core/product_config.mk index 0c4654195..2620adb10 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -396,6 +396,8 @@ PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER)) PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEX_PREOPT_DEFAULT_FLAGS)) +PRODUCT_DEX_PREOPT_GENERATE_DM_FILES := \ + $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEX_PREOPT_GENERATE_DM_FILES)) PRODUCT_DEX_PREOPT_BOOT_FLAGS := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEX_PREOPT_BOOT_FLAGS)) PRODUCT_DEX_PREOPT_PROFILE_DIR := \