Merge "Quick and dirty filtering of present LOCAL_OPTIONAL_USES_LIBRARIES."
diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk
index 084b302..6f6ac28 100644
--- a/core/dex_preopt_odex_install.mk
+++ b/core/dex_preopt_odex_install.mk
@@ -189,6 +189,16 @@
my_filtered_optional_uses_libraries := $(filter-out $(INTERNAL_PLATFORM_MISSING_USES_LIBRARIES), \
$(LOCAL_OPTIONAL_USES_LIBRARIES))
+ # TODO(b/132357300): This may filter out too much, as PRODUCT_PACKAGES doesn't
+ # include all packages (the full list is unknown until reading all Android.mk
+ # makefiles). As a consequence, a library may be present but not included in
+ # dexpreopt, which will result in class loader context mismatch and a failure
+ # to load dexpreopt code on device. We should fix this, either by deferring
+ # dependency computation until the full list of product packages is known, or
+ # by adding product-specific lists of missing libraries.
+ my_filtered_optional_uses_libraries := $(filter $(my_filtered_optional_uses_libraries), \
+ $(PRODUCT_PACKAGES))
+
ifeq ($(LOCAL_MODULE_CLASS),APPS)
# compatibility libraries are added to class loader context of an app only if
# targetSdkVersion in the app's manifest is lower than the given SDK version