From e9e087dddde8ff6d86423f17569cb342ee37e90e Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Tue, 27 Aug 2019 14:25:29 -0700 Subject: [PATCH] Send package changed for consumers of an updated shared lib In the case that a static shared library is updated (same version code), we should notify that the packages depending on the shared library have changed to reflect the new paths of the shared lib. Test: manual; update a static shared lib in place and observe broadcasts Bug: 140129991 Change-Id: Ic8fea872c828833585a680d49c8e423b911a753a (cherry picked from commit cbafe0b025e82c29136d8f3f82b9a7b9e400d25f) --- .../android/server/pm/PackageManagerService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 4621507107e89..52446107a5d71 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2023,6 +2023,14 @@ public class PackageManagerService extends IPackageManager.Stub pkgList.add(packageName); sendResourcesChangedBroadcast(true, true, pkgList, uidArray, null); } + } else if (!ArrayUtils.isEmpty(res.libraryConsumers)) { // if static shared lib + for (int i = 0; i < res.libraryConsumers.size(); i++) { + PackageParser.Package pkg = res.libraryConsumers.get(i); + // send broadcast that all consumers of the static shared library have changed + sendPackageChangedBroadcast(pkg.packageName, false /*killFlag*/, + new ArrayList<>(Collections.singletonList(pkg.packageName)), + pkg.applicationInfo.uid); + } } // Work that needs to happen on first install within each user @@ -12193,6 +12201,9 @@ public class PackageManagerService extends IPackageManager.Stub } } } + if (reconciledPkg.installResult != null) { + reconciledPkg.installResult.libraryConsumers = clientLibPkgs; + } if ((scanFlags & SCAN_BOOTING) != 0) { // No apps can run during boot scan, so they don't need to be frozen @@ -16046,6 +16057,8 @@ public class PackageManagerService extends IPackageManager.Stub String installerPackageName; PackageRemovedInfo removedInfo; ArrayMap addedChildPackages; + // The set of packages consuming this shared library or null if no consumers exist. + ArrayList libraryConsumers; public void setError(int code, String msg) { setReturnCode(code);