From b8a9b524f247ae7a45c57684c7ccd6c751eff2f0 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Wed, 3 Aug 2022 14:32:03 +0800 Subject: [PATCH] Include dependency packages in RunningAppProcessInfo So we have a complete picture about all packages loaded into a process. This will be used to check if installing a package causes a process to be killed. Note if pkgList or pkgDeps contain the package to be installed, the process will be killed during install. Bug: 235306967 Test: m Change-Id: I052185f8d54717e65fa1fddaa42ca80ebbf15a5d --- core/java/android/app/ActivityManager.java | 10 +++++++++- .../core/java/com/android/server/am/ProcessList.java | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index e4c758e3d1bdc..d899dab8a61d6 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -3128,7 +3128,13 @@ public class ActivityManager { /** * All packages that have been loaded into the process. */ - public String pkgList[]; + public String[] pkgList; + + /** + * Additional packages loaded into the process as dependency. + * @hide + */ + public String[] pkgDeps; /** * Constant for {@link #flags}: this is an app that is unable to @@ -3509,6 +3515,7 @@ public class ActivityManager { dest.writeInt(pid); dest.writeInt(uid); dest.writeStringArray(pkgList); + dest.writeStringArray(pkgDeps); dest.writeInt(this.flags); dest.writeInt(lastTrimLevel); dest.writeInt(importance); @@ -3527,6 +3534,7 @@ public class ActivityManager { pid = source.readInt(); uid = source.readInt(); pkgList = source.readStringArray(); + pkgDeps = source.readStringArray(); flags = source.readInt(); lastTrimLevel = source.readInt(); importance = source.readInt(); diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index ccbca76d18683..db829676759d6 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -3733,6 +3733,10 @@ public final class ProcessList { ActivityManager.RunningAppProcessInfo currApp = new ActivityManager.RunningAppProcessInfo(app.processName, app.getPid(), app.getPackageList()); + if (app.getPkgDeps() != null) { + final int size = app.getPkgDeps().size(); + currApp.pkgDeps = app.getPkgDeps().toArray(new String[size]); + } fillInProcMemInfoLOSP(app, currApp, clientTargetSdk); if (state.getAdjSource() instanceof ProcessRecord) { currApp.importanceReasonPid = ((ProcessRecord) state.getAdjSource()).getPid();