diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 4b8a24204ca78..0d8ba3e548014 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -725,6 +725,9 @@ public class PackageDexOptimizer { } catch (IOException ioe) { Slog.w(TAG, "IOException reading apk: " + path, ioe); return DEX_OPT_FAILED; + } catch (Exception e) { + Slog.wtf(TAG, "Unexpected exception when calling dexoptNeeded on " + path, e); + return DEX_OPT_FAILED; } return adjustDexoptNeeded(dexoptNeeded); } diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java index f7bf1d985786d..95a81f099e2db 100644 --- a/services/core/java/com/android/server/pm/dex/DexManager.java +++ b/services/core/java/com/android/server/pm/dex/DexManager.java @@ -548,6 +548,16 @@ public class DexManager { continue; } + if (dexUseInfo.isUnsupportedClassLoaderContext() + || dexUseInfo.isVariableClassLoaderContext()) { + String debugMsg = dexUseInfo.isUnsupportedClassLoaderContext() + ? "unsupported" + : "variable"; + Slog.w(TAG, "Skipping dexopt for system server path loaded with " + debugMsg + + " class loader context: " + dexPath); + continue; + } + int newResult = pdo.dexoptSystemServerPath(dexPath, dexUseInfo, overriddenOptions); // The end result is: