Sort PRODUCT_APEX_SYSTEM_SERVER_JARS automatically.
This is needed because product makefiles may need to add their own
system server jars to this variable, and they cannot insert them in
the correct alphabetical order on the list. So it needs to be sorted
automatically. Do this after processing all product makefiles and
populating the variable, but before passing it to Soong.
Bug: 207474880
Test: atest art_standalone_dexpreopt_tests:art_standalone_dexpreopt_tests.DexpreoptTest#ForSystemServer
Change-Id: I80dbf555c395c92539c506d3d8b1f2f101a58bce
diff --git a/core/product_config.mk b/core/product_config.mk
index 614dfa2..cf92924 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -320,6 +320,12 @@
PRODUCT_SYSTEM_SERVER_JARS := $(call qualify-platform-jars,$(PRODUCT_SYSTEM_SERVER_JARS))
+# Sort APEX system server jars. We use deterministic alphabetical order when
+# constructing SYSTEMSERVERCLASSPATH definition on device after a Mainline
+# update. Enforce it in the build system as well to avoid recompiling everything
+# after an update due a change in SYSTEMSERVERCLASSPATH order.
+PRODUCT_APEX_SYSTEM_SERVER_JARS := $(sort $(PRODUCT_APEX_SYSTEM_SERVER_JARS))
+
ifndef PRODUCT_SYSTEM_NAME
PRODUCT_SYSTEM_NAME := $(PRODUCT_NAME)
endif
diff --git a/target/product/default_art_config.mk b/target/product/default_art_config.mk
index e988d00..5e20218 100644
--- a/target/product/default_art_config.mk
+++ b/target/product/default_art_config.mk
@@ -65,7 +65,7 @@
com.android.tethering:framework-tethering \
com.android.wifi:framework-wifi
-# APEX system server jars. Keep the list sorted by module names and then library names.
+# APEX system server jars. The list will be sorted automatically.
PRODUCT_APEX_SYSTEM_SERVER_JARS := \
com.android.appsearch:service-appsearch \
com.android.art:service-art \