From d01997faa6463406222735f4a3aa81ae5b32afff Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 14 Mar 2017 18:11:38 -0700 Subject: [PATCH 1/2] Use DEFAULT_APP_TARGET_SDK for dx and desugar DEFAULT_APP_TARGET_SDK is PLATFORM_VERSION_CODENAME (for example 'P') for non-release builds, and PLATFORM_SDK_VERSION (for example 25) for release builds. Use it for dx and desugar, and translate PLATFORM_VERSION_CODENAME to 10000 to enable features in the current development version. Bug: 36087246 Bug: 36118520 Test: m -j ANDROID_COMPILE_WITH_JACK=false Change-Id: I3d6bbc36a8869e4ced6bb850bc32f37b4cba3f85 --- core/definitions.mk | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/definitions.mk b/core/definitions.mk index 1a7cc50fcf..3da48b5088 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2513,6 +2513,13 @@ define desugar-classpath $(filter-out -classpath -bootclasspath "",$(subst :,$(space),$(1))) endef +# Takes an sdk version that might be PLATFORM_VERSION_CODENAME (for example P), +# returns a number greater than the highest existing sdk version if it is, or +# the input if it is not. +define codename-or-sdk-to-sdk +$(if $(filter $(1),$(PLATFORM_VERSION_CODENAME)),10000,$(1)) +endef + define desugar-classes-jar @echo Desugar: $@ @mkdir -p $(dir $@) @@ -2520,7 +2527,7 @@ $(hide) rm -f $@ $@.tmp $(hide) java -jar $(DESUGAR) \ $(addprefix --bootclasspath_entry ,$(call desugar-bootclasspath,$(PRIVATE_BOOTCLASSPATH))) \ $(addprefix --classpath_entry ,$(PRIVATE_ALL_JAVA_LIBRARIES)) \ - --min_sdk_version $(PRIVATE_SDK_VERSION) \ + --min_sdk_version $(call codename-or-sdk-to-sdk,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ --allow_empty_bootclasspath \ $(if $(filter --core-library,$(PRIVATE_DX_FLAGS)),--core_library) \ -i $< -o $@.tmp @@ -2537,7 +2544,7 @@ $(hide) rm -f $(dir $@)classes*.dex $(hide) $(DX) \ -JXms16M -JXmx2048M \ --dex --output=$(dir $@) \ - --min-sdk-version=$(PRIVATE_SDK_VERSION) \ + --min-sdk-version=$(call codename-or-sdk-to-sdk,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ $(if $(NO_OPTIMIZE_DX), \ --no-optimize) \ $(if $(GENERATE_DEX_DEBUG), \ From 31060fdde19da6230ec1fccd5d6265148ab8cedc Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 21 Mar 2017 10:17:04 -0700 Subject: [PATCH 2/2] Don't desugar static java libraries Static java libraires are designed to be included in another java library. If desugar runs on the static java library, the resulting jar will contain the desugared lambda classes. When the static jar is included into another java library and desugar runs again, it desugars the static java library classes again, producing the same desugared lambda classes and colliding in the final jar. Test: m -j ANDROID_COMPILE_WITH_JACK=false Change-Id: I0508b2cc9c56dbbd4ac0aba44fb99ea2a27715e0 --- core/java.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/java.mk b/core/java.mk index 1835983aa6..019b0551b5 100644 --- a/core/java.mk +++ b/core/java.mk @@ -456,12 +456,14 @@ javac-check-$(LOCAL_MODULE) : $(full_classes_compiled_jar) my_desugaring := ifndef LOCAL_JACK_ENABLED ifeq ($(LOCAL_JAVA_LANGUAGE_VERSION),1.8) +ifndef LOCAL_IS_STATIC_JAVA_LIBRARY my_desugaring := true $(full_classes_desugar_jar): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) $(full_classes_desugar_jar): $(full_classes_compiled_jar) $(DESUGAR) $(desugar-classes-jar) endif endif +endif ifndef my_desugaring full_classes_desugar_jar := $(full_classes_compiled_jar)