summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 3def9aa5969e..24293b9b9fde 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8745,12 +8745,40 @@ public class ActivityManagerService extends IActivityManager.Stub
if (process.info.isInstantApp()) {
sb.append("Instant-App: true\n");
}
+
if (isSdkSandboxUid(process.uid)) {
+ final int appUid = Process.getAppUidForSdkSandboxUid(process.uid);
+ try {
+ String[] clientPackages = pm.getPackagesForUid(appUid);
+ // In shared UID case, don't add the package information
+ if (clientPackages.length == 1) {
+ appendSdkSandboxClientPackageHeader(sb, clientPackages[0], callingUserId);
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error getting packages for client app uid: " + appUid, e);
+ }
sb.append("SdkSandbox: true\n");
}
}
}
+ private void appendSdkSandboxClientPackageHeader(StringBuilder sb, String pkg, int userId) {
+ final IPackageManager pm = AppGlobals.getPackageManager();
+ sb.append("SdkSandbox-Client-Package: ").append(pkg);
+ try {
+ final PackageInfo pi = pm.getPackageInfo(pkg, 0, userId);
+ if (pi != null) {
+ sb.append(" v").append(pi.getLongVersionCode());
+ if (pi.versionName != null) {
+ sb.append(" (").append(pi.versionName).append(")");
+ }
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error getting package info for SDK sandbox client: " + pkg, e);
+ }
+ sb.append("\n");
+ }
+
private static String processClass(ProcessRecord process) {
if (process == null || process.getPid() == MY_PID) {
return "system_server";