From a90b6070c7369c9cf401b5c391f9fbf20d2d5d6f Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 25 Jul 2018 10:12:48 -0700 Subject: [PATCH 1/3] Move manifest fixing to a separate rule Manifest fixing is getting complicated, move it to a separate rule so that it doesn't have to be a function in definitions.mk. Bug: 111347801 Test: m checkbuild Change-Id: Ibc60ad79c9c4f4a63a0e1c8f7779534954fb6585 --- core/android_manifest.mk | 37 ++++++++++++++++++++----------------- core/definitions.mk | 12 ------------ 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/core/android_manifest.mk b/core/android_manifest.mk index 517379a12e..fc6b42d747 100644 --- a/core/android_manifest.mk +++ b/core/android_manifest.mk @@ -38,28 +38,31 @@ else $(full_android_manifest): PRIVATE_MIN_SDK_VERSION := $(DEFAULT_APP_TARGET_SDK) endif -# Set up rules to merge library manifest files -my_exported_sdk_libs_file := $(call local-intermediates-dir,COMMON)/exported-sdk-libs -$(full_android_manifest): PRIVATE_EXPORTED_SDK_LIBS_FILE := $(my_exported_sdk_libs_file) -$(full_android_manifest): $(my_exported_sdk_libs_file) -$(full_android_manifest): $(MANIFEST_FIXER) - ifneq (,$(strip $(my_full_libs_manifest_files))) + # Set up rules to merge library manifest files + fixed_android_manifest := $(intermediates.COMMON)/manifest/AndroidManifest.xml.fixed -$(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(my_full_libs_manifest_files) -$(full_android_manifest): $(ANDROID_MANIFEST_MERGER_DEPS) -$(full_android_manifest) : $(main_android_manifest) $(my_full_libs_manifest_files) + $(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(my_full_libs_manifest_files) + $(full_android_manifest): $(ANDROID_MANIFEST_MERGER_DEPS) + $(full_android_manifest) : $(fixed_android_manifest) $(my_full_libs_manifest_files) @echo "Merge android manifest files: $@ <-- $< $(PRIVATE_LIBS_MANIFESTS)" @mkdir -p $(dir $@) - $(call fix-manifest,$<,$@.tmp,$(PRIVATE_MIN_SDK_VERSION),$(PRIVATE_EXPORTED_SDK_LIBS_FILE)) - $(hide) $(ANDROID_MANIFEST_MERGER) --main $@.tmp \ + $(hide) $(ANDROID_MANIFEST_MERGER) --main $< \ --libs $(call normalize-path-list,$(PRIVATE_LIBS_MANIFESTS)) \ --out $@ - rm $@.tmp - else -$(full_android_manifest): $(main_android_manifest) - @echo "Fix manifest: $@" - $(call fix-manifest,$<,$@,$(PRIVATE_MIN_SDK_VERSION),$(PRIVATE_EXPORTED_SDK_LIBS_FILE)) - + fixed_android_manifest := $(full_android_manifest) endif + +my_exported_sdk_libs_file := $(call local-intermediates-dir,COMMON)/exported-sdk-libs +$(fixed_android_manifest): PRIVATE_EXPORTED_SDK_LIBS_FILE := $(my_exported_sdk_libs_file) +$(fixed_android_manifest): $(my_exported_sdk_libs_file) + +$(fixed_android_manifest): $(MANIFEST_FIXER) +$(fixed_android_manifest): $(main_android_manifest) + @echo "Fix manifest: $@" + $(MANIFEST_FIXER) \ + --minSdkVersion $(PRIVATE_MIN_SDK_VERSION) \ + $(if (PRIVATE_EXPORTED_SDK_LIBS_FILE),\ + $$(cat $(PRIVATE_EXPORTED_SDK_LIBS_FILE) | sort -u | sed -e 's/^/\ --uses-library\ /' | tr '\n' ' ')) \ + $< $@ diff --git a/core/definitions.mk b/core/definitions.mk index 7108e0903c..87ec31b643 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -742,18 +742,6 @@ define exported-sdk-libs-files $(foreach lib,$(1),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/exported-sdk-libs) endef -# Fix manifest -# $(1): input manifest path -# $(2): output manifest path -# $(3): min sdk version -# $(4): (optional) exported-sdk-libs file -define fix-manifest -$(MANIFEST_FIXER) \ ---minSdkVersion $(3) \ -$(if $(4),$$(cat $(4) | sort -u | sed -e 's/^/\ --uses-library\ /' | tr '\n' ' ')) \ -$(1) $(2) -endef - ########################################################### ## Returns true if $(1) and $(2) are equal. Returns ## the empty string if they are not equal. From fcb441b2b7b8a8c1ad39029a4540ec8fa84b8a50 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 25 Jul 2018 13:40:05 -0700 Subject: [PATCH 2/3] Fix dependencies for obfuscated instrumentation tests This path is never used, otherwise the dependency on proguard.classes.jar would have triggered the checkbuild dangling rules errors. Remove the dependency on the proguarded classes, which don't exist any more, and depend on the proguard_options and proguard_dictionary files instead. Test: none Change-Id: Ia3ebc3bc71f0d6fdfa4a7a6850e2f7021adfdd1a --- core/java.mk | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/java.mk b/core/java.mk index 78b492ddbc..5f7a43a4a5 100644 --- a/core/java.mk +++ b/core/java.mk @@ -457,14 +457,15 @@ legacy_proguard_flags := -injars $(link_instr_classes_jar) \ -applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \ -verbose \ $(legacy_proguard_flags) +legacy_proguard_lib_deps += \ + $(link_instr_classes_jar) \ + $(link_instr_intermediates_dir.COMMON)/proguard_options \ + $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \ # Sometimes (test + main app) uses different keep rules from the main app - # apply the main app's dictionary anyway. legacy_proguard_flags += -ignorewarnings -# Make sure we run Proguard on the main app first -$(full_classes_proguard_jar) : $(link_instr_intermediates_dir.COMMON)/proguard.classes.jar - endif # no obfuscation endif # LOCAL_INSTRUMENTATION_FOR From acebb3266fb03272494b4ca165689336605e2dc8 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 25 Jul 2018 16:11:31 -0700 Subject: [PATCH 3/3] Pass --library to manifest_fixer.py for android libraries manifest_fixer.py needs to know the difference between apps and android libraries in order to change its behavior around inserting targetSdkVersion. Bug: 111347801 Test: m checkbuild Change-Id: Ic21f1b98e3bcbd782612370c46134fc9dd157512 --- core/android_manifest.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/android_manifest.mk b/core/android_manifest.mk index fc6b42d747..13da10cfa9 100644 --- a/core/android_manifest.mk +++ b/core/android_manifest.mk @@ -58,11 +58,16 @@ my_exported_sdk_libs_file := $(call local-intermediates-dir,COMMON)/exported-sdk $(fixed_android_manifest): PRIVATE_EXPORTED_SDK_LIBS_FILE := $(my_exported_sdk_libs_file) $(fixed_android_manifest): $(my_exported_sdk_libs_file) +$(fixed_android_manifest): PRIVATE_MANIFEST_FIXER_FLAGS := +ifneq ($(LOCAL_MODULE_CLASS),APPS) +$(fixed_android_manifest): PRIVATE_MANIFEST_FIXER_FLAGS := --library +endif $(fixed_android_manifest): $(MANIFEST_FIXER) $(fixed_android_manifest): $(main_android_manifest) @echo "Fix manifest: $@" $(MANIFEST_FIXER) \ --minSdkVersion $(PRIVATE_MIN_SDK_VERSION) \ + $(PRIVATE_MANIFEST_FIXER_FLAGS) \ $(if (PRIVATE_EXPORTED_SDK_LIBS_FILE),\ $$(cat $(PRIVATE_EXPORTED_SDK_LIBS_FILE) | sort -u | sed -e 's/^/\ --uses-library\ /' | tr '\n' ' ')) \ $< $@