diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 0bdbe4c0c21db..4ebf81164a09c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -10748,6 +10748,7 @@ public class PackageManagerService extends IPackageManager.Stub // them in the case where we're not upgrading or booting for the first time. String primaryCpuAbiFromSettings = null; String secondaryCpuAbiFromSettings = null; + boolean needToDeriveAbi = (scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) != 0; // writer synchronized (mPackages) { @@ -10825,11 +10826,14 @@ public class PackageManagerService extends IPackageManager.Stub } } - if ((scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) == 0) { + if (!needToDeriveAbi) { PackageSetting foundPs = mSettings.getPackageLPr(pkg.packageName); if (foundPs != null) { primaryCpuAbiFromSettings = foundPs.primaryCpuAbiString; secondaryCpuAbiFromSettings = foundPs.secondaryCpuAbiString; + } else { + // when re-adding a system package failed after uninstalling updates. + needToDeriveAbi = true; } } @@ -11036,7 +11040,7 @@ public class PackageManagerService extends IPackageManager.Stub final String cpuAbiOverride = deriveAbiOverride(pkg.cpuAbiOverride, pkgSetting); if ((scanFlags & SCAN_NEW_INSTALL) == 0) { - if ((scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) != 0) { + if (needToDeriveAbi) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "derivePackageAbi"); final boolean extractNativeLibs = !pkg.isLibrary(); derivePackageAbi(pkg, scanFile, cpuAbiOverride, extractNativeLibs,