diff options
author | Bryan Ferris <bferris@google.com> | 2020-01-08 22:46:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-08 22:46:45 +0000 |
commit | e422bc0c8f77677c82dc979b0f58708d1c997be9 (patch) | |
tree | 866182b5e0d63e32bd82b0c099808e2d0c9d0219 | |
parent | 0f41dc420fe5933ac70e9b85ab4f1ead845ab7da (diff) | |
parent | 5d3fc339b57950fd8621cb410865e8800ccb6873 (diff) | |
download | base-e422bc0c8f77677c82dc979b0f58708d1c997be9.tar.gz |
Merge changes I8ae4e331,Id4e37c3e,If0fd4834 into oc-dev
* changes:
Fixes NPE when preparing app data during init
Use KNOWN_PACKAGES when shared lib consumers
Handles null outInfo in deleteSystemPackageLI
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ab6c956c6924..a3f3cedf1e2c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -18951,7 +18951,7 @@ public class PackageManagerService extends IPackageManager.Stub continue; } List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr( - libEntry.info, 0, currUserId); + libEntry.info, MATCH_KNOWN_PACKAGES, currUserId); if (!ArrayUtils.isEmpty(libClientPackages)) { Slog.w(TAG, "Not removing package " + pkg.manifestPackageName + " hosting lib " + libEntry.info.getName() + " version " @@ -19283,7 +19283,8 @@ public class PackageManagerService extends IPackageManager.Stub * Tries to delete system package. */ private boolean deleteSystemPackageLIF(PackageParser.Package deletedPkg, - PackageSetting deletedPs, int[] allUserHandles, int flags, PackageRemovedInfo outInfo, + PackageSetting deletedPs, int[] allUserHandles, int flags, + @Nullable PackageRemovedInfo outInfo, boolean writeSettings) { if (deletedPs.parentPackageName != null) { Slog.w(TAG, "Attempt to delete child system package " + deletedPkg.packageName); @@ -19291,7 +19292,7 @@ public class PackageManagerService extends IPackageManager.Stub } final boolean applyUserRestrictions - = (allUserHandles != null) && (outInfo.origUsers != null); + = (allUserHandles != null) && outInfo != null && (outInfo.origUsers != null); final PackageSetting disabledPs; // Confirm if the system package has been updated // An updated system app can be deleted. This will also have to restore @@ -19321,19 +19322,21 @@ public class PackageManagerService extends IPackageManager.Stub } } - // Delete the updated package - outInfo.isRemovedPackageSystemUpdate = true; - if (outInfo.removedChildPackages != null) { - final int childCount = (deletedPs.childPackageNames != null) - ? deletedPs.childPackageNames.size() : 0; - for (int i = 0; i < childCount; i++) { - String childPackageName = deletedPs.childPackageNames.get(i); - if (disabledPs.childPackageNames != null && disabledPs.childPackageNames - .contains(childPackageName)) { - PackageRemovedInfo childInfo = outInfo.removedChildPackages.get( - childPackageName); - if (childInfo != null) { - childInfo.isRemovedPackageSystemUpdate = true; + if (outInfo != null) { + // Delete the updated package + outInfo.isRemovedPackageSystemUpdate = true; + if (outInfo.removedChildPackages != null) { + final int childCount = (deletedPs.childPackageNames != null) + ? deletedPs.childPackageNames.size() : 0; + for (int i = 0; i < childCount; i++) { + String childPackageName = deletedPs.childPackageNames.get(i); + if (disabledPs.childPackageNames != null && disabledPs.childPackageNames + .contains(childPackageName)) { + PackageRemovedInfo childInfo = outInfo.removedChildPackages.get( + childPackageName); + if (childInfo != null) { + childInfo.isRemovedPackageSystemUpdate = true; + } } } } @@ -23433,9 +23436,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); mSettings.writeKernelMappingLPr(ps); } - final UserManager um = mContext.getSystemService(UserManager.class); + final UserManagerService um = sUserManager; UserManagerInternal umInternal = getUserManagerInternal(); - for (UserInfo user : um.getUsers()) { + for (UserInfo user : um.getUsers(false /* excludeDying */)) { final int flags; if (umInternal.isUserUnlockingOrUnlocked(user.id)) { flags = StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE; @@ -24062,8 +24065,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); continue; } final String packageName = ps.pkg.packageName; - // Skip over if system app - if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0) { + // Skip over if system app or static shared library + if ((ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0 + || !TextUtils.isEmpty(ps.pkg.staticSharedLibName)) { continue; } if (DEBUG_CLEAN_APKS) { |