From 3f520b19e17086e44310554c933d83bc9929662d Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 1 Feb 2022 19:21:17 -0800 Subject: [PATCH] Null check package for DexOptHelper A package can be null if the APK storage has been ejected or the package install was orphaned via bad parse. This might've been broken in the refactor when this was moved to PackageState. Bug: 217395249 Change-Id: I6353f1832abe502a448991cdb399f7d15c8e9d1f --- services/core/java/com/android/server/pm/DexOptHelper.java | 3 ++- .../core/java/com/android/server/pm/PackageDexOptimizer.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java index ba89916e6dfa7..53eb9cf7d9fe5 100644 --- a/services/core/java/com/android/server/pm/DexOptHelper.java +++ b/services/core/java/com/android/server/pm/DexOptHelper.java @@ -293,7 +293,8 @@ final class DexOptHelper { public ArraySet getOptimizablePackages() { ArraySet pkgs = new ArraySet<>(); mPm.forEachPackageState(packageState -> { - if (mPm.mPackageDexOptimizer.canOptimizePackage(packageState.getPkg())) { + final AndroidPackage pkg = packageState.getPkg(); + if (pkg != null && mPm.mPackageDexOptimizer.canOptimizePackage(pkg)) { pkgs.add(packageState.getPackageName()); } }); diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index a5b42f03b6dfa..69d498794e64a 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -182,7 +182,7 @@ public class PackageDexOptimizer { mInjector = injector; } - boolean canOptimizePackage(AndroidPackage pkg) { + boolean canOptimizePackage(@NonNull AndroidPackage pkg) { // We do not dexopt a package with no code. // Note that the system package is marked as having no code, however we can // still optimize it via dexoptSystemServerPath.