From eca64b391408dfdb9ff3ae03fc39cfdb6918f3ad Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 25 Jun 2012 16:37:32 -0700 Subject: [PATCH] Use removePackageLI instead of removing mPackages When adding an system app via OTA, trying to remove it from mPackages directly doesn't work. The ContentProviders and other things aren't removed and point to the hidden system app's applicationInfo instead of the updated app. Bug: 6685263 Change-Id: I487cf518e0e3c60fae736e9b974617023a7dee8d --- .../com/android/server/pm/PackageManagerService.java | 11 +++++++++-- services/java/com/android/server/pm/Settings.java | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 9a79f86c7177b..e20cd02dc5512 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -1087,7 +1087,8 @@ public class PackageManagerService extends IPackageManager.Stub { /* * If the package is scanned, it's not erased. */ - if (mPackages.containsKey(ps.name)) { + final PackageParser.Package scannedPkg = mPackages.get(ps.name); + if (scannedPkg != null) { /* * If the system app is both scanned and in the * disabled packages list, then it must have been @@ -1096,7 +1097,9 @@ public class PackageManagerService extends IPackageManager.Stub { * application can be scanned. */ if (mSettings.isDisabledSystemPackageLPr(ps.name)) { - mPackages.remove(ps.name); + Slog.i(TAG, "Expecting better updatd system app for " + ps.name + + "; removing system app"); + removePackageLI(scannedPkg, true); } continue; @@ -8626,6 +8629,10 @@ public class PackageManagerService extends IPackageManager.Stub { } pw.print(" ["); pw.print(entry.getKey()); pw.println("]:"); pw.print(" "); pw.println(p.toString()); + if (p.info != null && p.info.applicationInfo != null) { + final String appInfo = p.info.applicationInfo.toString(); + pw.print(" applicationInfo="); pw.println(appInfo); + } } } diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java index 91cd4587293e4..d031686e3c066 100644 --- a/services/java/com/android/server/pm/Settings.java +++ b/services/java/com/android/server/pm/Settings.java @@ -2459,6 +2459,7 @@ final class Settings { pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); pw.print(" versionCode="); pw.println(ps.versionCode); if (ps.pkg != null) { + pw.print(" applicationInfo="); pw.println(ps.pkg.applicationInfo.toString()); pw.print(" flags="); printFlags(pw, ps.pkg.applicationInfo.flags, FLAG_DUMP_SPEC); pw.println(); pw.print(" versionName="); pw.println(ps.pkg.mVersionName); pw.print(" dataDir="); pw.println(ps.pkg.applicationInfo.dataDir); @@ -2592,6 +2593,10 @@ final class Settings { pw.print(" compat name="); pw.println(ps.name); } + if (ps.pkg != null && ps.pkg.applicationInfo != null) { + pw.print(" applicationInfo="); + pw.println(ps.pkg.applicationInfo.toString()); + } pw.print(" userId="); pw.println(ps.appId); pw.print(" sharedUser=");