From 1ad432e5da0fd40db7529886430f10d594c2bafb Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Fri, 10 Jun 2022 20:30:35 +0100 Subject: [PATCH] Use `ParcelFileDescriptor` when calling ART commands. This change is required by API guidelines. Bug: 235330409 Test: adb shell pm art get-optimization-status com.google.android.youtube Change-Id: I857ba31c7ba96df8641e3c7927e8a7eb1e7af1d0 --- .../android/server/pm/PackageManagerShellCommand.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 7414f019b8deb..c11a04fef8681 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -3414,9 +3414,14 @@ class PackageManagerShellCommand extends ShellCommand { // Remove the first arg "art" and forward to ART module. String[] args = getAllArgs(); args = Arrays.copyOfRange(args, 1, args.length); - return LocalManagerRegistry.getManagerOrThrow(ArtManagerLocal.class) - .handleShellCommand(getTarget(), getInFileDescriptor(), getOutFileDescriptor(), - getErrFileDescriptor(), args); + try (var in = ParcelFileDescriptor.dup(getInFileDescriptor()); + var out = ParcelFileDescriptor.dup(getOutFileDescriptor()); + var err = ParcelFileDescriptor.dup(getErrFileDescriptor())) { + return LocalManagerRegistry.getManagerOrThrow(ArtManagerLocal.class) + .handleShellCommand(getTarget(), in, out, err, args); + } catch (IOException e) { + throw new IllegalStateException(e); + } } private static String checkAbiArgument(String abi) {