From 950f1efbbc777a3d3276c87a0f4328d969468c82 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 5 Apr 2017 15:30:42 -0700 Subject: [PATCH] Move proguard before classes.jar Downstream users of a library always link against javalib.jar, which is either the dex jar for java libraries or a copy of proguard.classes.jar for static java libraries. In preparation for making java libraries a superset of static java libraries, make classes.jar always be the final class-containing jar for use downstream, and always create a classes-pre-proguard.jar for users that need a jar without shrinking or obfuscation. Also rename the intermediates to be consitent: classes-.jar Test: m -j ANDROID_COMPILE_WITH_JACK=false java Change-Id: I3df8b9a4edcd5db996f1fedc54c8a782d4f36a92 Merged-In: I3df8b9a4edcd5db996f1fedc54c8a782d4f36a92 (cherry picked from commit 6fabefa88eb7c0f90e6652c59e46e2fa12b979bb) --- core/dpi_specific_apk.mk | 2 +- core/java.mk | 20 ++++++++++++-------- core/java_common.mk | 4 ++-- core/java_library.mk | 6 +----- core/package_internal.mk | 2 +- core/prebuilt_internal.mk | 4 ++++ 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/core/dpi_specific_apk.mk b/core/dpi_specific_apk.mk index 1ca01d514e..1b0be07766 100644 --- a/core/dpi_specific_apk.mk +++ b/core/dpi_specific_apk.mk @@ -36,7 +36,7 @@ ifneq ($(full_classes_jar),) $(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex) ifndef LOCAL_JACK_ENABLED # Use the jarjar processed arhive as the initial package file. -$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) else $(built_dpi_apk): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc endif # LOCAL_JACK_ENABLED diff --git a/core/java.mk b/core/java.mk index 8cc3f04815..affd15fad4 100644 --- a/core/java.mk +++ b/core/java.mk @@ -110,14 +110,14 @@ LOCAL_PROGUARD_ENABLED := endif full_classes_compiled_jar := $(intermediates.COMMON)/$(full_classes_compiled_jar_leaf) -full_classes_desugar_jar := $(intermediates.COMMON)/desugar.classes.jar +full_classes_desugar_jar := $(intermediates.COMMON)/classes-desugar.jar jarjar_leaf := classes-jarjar.jar full_classes_jarjar_jar := $(intermediates.COMMON)/$(jarjar_leaf) emma_intermediates_dir := $(intermediates.COMMON)/emma_out # emma is hardcoded to use the leaf name of its input for the output file -- # only the output directory can be changed full_classes_emma_jar := $(emma_intermediates_dir)/lib/$(jarjar_leaf) -full_classes_proguard_jar := $(intermediates.COMMON)/proguard.classes.jar +full_classes_proguard_jar := $(intermediates.COMMON)/classes-proguard.jar built_dex_intermediate := $(intermediates.COMMON)/$(built_dex_intermediate_leaf)/classes.dex full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar @@ -483,11 +483,11 @@ else full_classes_emma_jar := $(full_classes_jarjar_jar) endif -# Keep a copy of the jar just before proguard processing. # TODO: this should depend on full_classes_emma_jar once coverage works again -$(eval $(call copy-one-file,$(full_classes_jarjar_jar),$(full_classes_jar))) +full_classes_pre_proguard_jar := $(full_classes_jarjar_jar) -$(call define-jar-to-toc-rule, $(full_classes_jar)) +# Keep a copy of the jar just before proguard processing. +$(eval $(call copy-one-file,$(full_classes_pre_proguard_jar),$(intermediates.COMMON)/classes-pre-proguard.jar)) # Run proguard if necessary ifdef LOCAL_PROGUARD_ENABLED @@ -618,13 +618,17 @@ endif $(full_classes_proguard_jar): PRIVATE_PROGUARD_INJAR_FILTERS := $(proguard_injar_filters) $(full_classes_proguard_jar): PRIVATE_EXTRA_INPUT_JAR := $(extra_input_jar) $(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(legacy_proguard_flags) $(common_proguard_flags) $(LOCAL_PROGUARD_FLAGS) -$(full_classes_proguard_jar) : $(full_classes_jar) $(extra_input_jar) $(my_support_library_sdk_raise) $(common_proguard_flag_files) $(proguard_flag_files) | $(PROGUARD) +$(full_classes_proguard_jar) : $(full_classes_pre_proguard_jar) $(extra_input_jar) $(my_support_library_sdk_raise) $(common_proguard_flag_files) $(proguard_flag_files) | $(PROGUARD) $(call transform-jar-to-proguard) else # LOCAL_PROGUARD_ENABLED not defined -full_classes_proguard_jar := $(full_classes_jar) +full_classes_proguard_jar := $(full_classes_pre_proguard_jar) endif # LOCAL_PROGUARD_ENABLED defined +$(eval $(call copy-one-file,$(full_classes_proguard_jar),$(full_classes_jar))) + +$(call define-jar-to-toc-rule, $(full_classes_jar)) + ifndef LOCAL_JACK_ENABLED $(built_dex_intermediate): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) # If you instrument class files that have local variable debug information in @@ -650,7 +654,7 @@ findbugs_xml := $(intermediates.COMMON)/findbugs.xml $(findbugs_xml): PRIVATE_AUXCLASSPATH := $(addprefix -auxclasspath ,$(strip \ $(call normalize-path-list,$(filter %.jar,$(full_java_libs))))) $(findbugs_xml): PRIVATE_FINDBUGS_FLAGS := $(LOCAL_FINDBUGS_FLAGS) -$(findbugs_xml) : $(full_classes_jar) $(filter %.xml, $(LOCAL_FINDBUGS_FLAGS)) +$(findbugs_xml) : $(full_classes_pre_proguard_jar) $(filter %.xml, $(LOCAL_FINDBUGS_FLAGS)) @echo Findbugs: $@ $(hide) $(FINDBUGS) -textui -effort:min -xml:withMessages \ $(PRIVATE_AUXCLASSPATH) $(PRIVATE_FINDBUGS_FLAGS) \ diff --git a/core/java_common.mk b/core/java_common.mk index 8fc4fb66b4..cd3d5b98b8 100644 --- a/core/java_common.mk +++ b/core/java_common.mk @@ -242,7 +242,7 @@ ifneq ($(apk_libraries),) link_apk_libraries := \ $(foreach lib,$(apk_libraries), \ $(call intermediates-dir-for, \ - APPS,$(lib),,COMMON)/classes.jar) + APPS,$(lib),,COMMON)/classes-pre-proguard.jar) # link against the jar with full original names (before proguard processing). full_shared_java_libs += $(link_apk_libraries) @@ -263,7 +263,7 @@ ifdef LOCAL_INSTRUMENTATION_FOR link_instr_intermediates_dir.COMMON := $(call intermediates-dir-for, \ APPS,$(LOCAL_INSTRUMENTATION_FOR),,COMMON) # link against the jar with full original names (before proguard processing). - link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes.jar + link_instr_classes_jar := $(link_instr_intermediates_dir.COMMON)/classes-pre-proguard.jar full_java_libs += $(link_instr_classes_jar) full_java_lib_deps += $(link_instr_classes_jar) endif # LOCAL_INSTRUMENTATION_FOR diff --git a/core/java_library.mk b/core/java_library.mk index f770a54fba..8f84dc6ade 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -67,11 +67,7 @@ include $(BUILD_SYSTEM)/java.mk ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) # No dex; all we want are the .class files with resources. $(common_javalib.jar) : $(java_resource_sources) -ifdef LOCAL_PROGUARD_ENABLED -$(common_javalib.jar) : $(full_classes_proguard_jar) -else $(common_javalib.jar) : $(full_classes_jar) -endif @echo "target Static Jar: $(PRIVATE_MODULE) ($@)" $(copy-file-to-target) @@ -85,7 +81,7 @@ endif else # !LOCAL_IS_STATIC_JAVA_LIBRARY $(common_javalib.jar): PRIVATE_DEX_FILE := $(built_dex) -$(common_javalib.jar): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +$(common_javalib.jar): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) $(common_javalib.jar): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) $(common_javalib.jar) : $(built_dex) $(java_resource_sources) | $(ZIPTIME) @echo "target Jar: $(PRIVATE_MODULE) ($@)" diff --git a/core/package_internal.mk b/core/package_internal.mk index 312fd9df82..e512211167 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -484,7 +484,7 @@ endif # LOCAL_NO_STANDARD_LIBRARIES ifneq ($(full_classes_jar),) $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) # Use the jarjar processed arhive as the initial package file. -$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) $(LOCAL_BUILT_MODULE): $(built_dex) else $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index 997f97161f..29502a27f8 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -431,6 +431,7 @@ ifeq ($(LOCAL_IS_HOST_MODULE),) # for target java libraries, the LOCAL_BUILT_MODULE is in a product-specific dir, # while the deps should be in the common dir, so we make a copy in the common dir. common_classes_jar := $(intermediates.COMMON)/classes.jar +common_classes_pre_proguard_jar := $(intermediates.COMMON)/classes-pre-proguard.jar common_javalib_jar := $(intermediates.COMMON)/javalib.jar $(common_classes_jar) $(common_javalib_jar): PRIVATE_MODULE := $(LOCAL_MODULE) @@ -473,6 +474,9 @@ endif $(common_classes_jar) : $(my_src_jar) $(transform-prebuilt-to-target) +$(common_classes_pre_proguard_jar) : $(my_src_jar) + $(transform-prebuilt-to-target) + $(common_javalib_jar) : $(common_classes_jar) $(transform-prebuilt-to-target)