summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2019-11-01 20:17:02 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2019-11-01 20:17:02 +0000
commitd4a9d9d2754e5ac7714037af93d380f4dcd1555a (patch)
treeefc6c5ebf380bf040d90fb0df7b124ff2ab2359d
parent3d8a0ce48992c77b67e27f1fc079a3fdb648b9b3 (diff)
parent0335f0916dd3473737a30904e2dfc86cbd4b7080 (diff)
Merge "Fix crash loop due to broken packages.xml around updated-package"
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 0460a80b1dc0..461743e9ba53 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -9334,6 +9334,16 @@ public class PackageManagerService extends IPackageManager.Stub
pkgSetting = originalPkgSetting == null ? installedPkgSetting : originalPkgSetting;
pkgAlreadyExists = pkgSetting != null;
final String disabledPkgName = pkgAlreadyExists ? pkgSetting.name : pkg.packageName;
+ if (scanSystemPartition && !pkgAlreadyExists
+ && mSettings.getDisabledSystemPkgLPr(disabledPkgName) != null) {
+ // The updated-package data for /system apk remains inconsistently
+ // after the package data for /data apk is lost accidentally.
+ // To recover it, enable /system apk and install it as non-updated system app.
+ Slog.w(TAG, "Inconsistent package setting of updated system app for "
+ + disabledPkgName + ". To recover it, enable the system app"
+ + "and install it as non-updated system app.");
+ mSettings.removeDisabledSystemPackageLPw(disabledPkgName);
+ }
disabledPkgSetting = mSettings.getDisabledSystemPkgLPr(disabledPkgName);
isSystemPkgUpdated = disabledPkgSetting != null;