summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Patrick Baumann <patb@google.com> 2019-08-27 14:25:29 -0700
committer Patrick Baumann <patb@google.com> 2019-08-28 06:58:11 -0700
commitcbafe0b025e82c29136d8f3f82b9a7b9e400d25f (patch)
treebefc8c2d1ada026a59328c701f2f181b13cde49e
parent79a1f8e7028c94b16d9de07b7898d933da4a156c (diff)
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
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java13
1 files changed, 13 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 2bf5f4d87682..41403fdeeeef 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2149,6 +2149,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
@@ -11878,6 +11886,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
@@ -15157,6 +15168,8 @@ public class PackageManagerService extends IPackageManager.Stub
String installerPackageName;
PackageRemovedInfo removedInfo;
ArrayMap<String, PackageInstalledInfo> addedChildPackages;
+ // The set of packages consuming this shared library or null if no consumers exist.
+ ArrayList<PackageParser.Package> libraryConsumers;
public void setError(int code, String msg) {
setReturnCode(code);