From: Svet Ganov Date: Mon, 15 May 2017 09:48:22 +0000 (-0700) Subject: Hadler USER_ALL when uninstalling static shared lib X-Git-Tag: android-x86-9.0-r1~1044^2~723^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5ef1cefd6eaa2485fea5ed606b3b4d86374e7294;p=android-x86%2Fframeworks-base.git Hadler USER_ALL when uninstalling static shared lib Test: manual - cannot uninstall an lib with cross user dependency All static shared lib CTS tests pass bug:36632264 Change-Id: Idd11405b27ccd8cacc2a50814e1317356689b7d1 --- diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 0173533d9594..32013851fb67 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -17973,22 +17973,30 @@ public class PackageManagerService extends IPackageManager.Stub // Static shared libs can be declared by any package, so let us not // allow removing a package if it provides a lib others depend on. pkg = mPackages.get(packageName); + + allUsers = sUserManager.getUserIds(); + if (pkg != null && pkg.staticSharedLibName != null) { SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(pkg.staticSharedLibName, pkg.staticSharedLibVersion); if (libEntry != null) { - List libClientPackages = getPackagesUsingSharedLibraryLPr( - libEntry.info, 0, userId); - if (!ArrayUtils.isEmpty(libClientPackages)) { - Slog.w(TAG, "Not removing package " + pkg.manifestPackageName - + " hosting lib " + libEntry.info.getName() + " version " - + libEntry.info.getVersion() + " used by " + libClientPackages); - return PackageManager.DELETE_FAILED_USED_SHARED_LIBRARY; + for (int currUserId : allUsers) { + if (userId != UserHandle.USER_ALL && userId != currUserId) { + continue; + } + List libClientPackages = getPackagesUsingSharedLibraryLPr( + libEntry.info, 0, currUserId); + if (!ArrayUtils.isEmpty(libClientPackages)) { + Slog.w(TAG, "Not removing package " + pkg.manifestPackageName + + " hosting lib " + libEntry.info.getName() + " version " + + libEntry.info.getVersion() + " used by " + libClientPackages + + " for user " + currUserId); + return PackageManager.DELETE_FAILED_USED_SHARED_LIBRARY; + } } } } - allUsers = sUserManager.getUserIds(); info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true); }