diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 48c6ab010a9ac..b603e21cd8d68 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -2285,10 +2285,23 @@ class PackageManagerShellCommand extends ShellCommand { } private int runClear() throws RemoteException { + final PrintWriter pw = getOutPrintWriter(); int userId = UserHandle.USER_SYSTEM; - String option = getNextOption(); - if (option != null && option.equals("--user")) { - userId = UserHandle.parseUserArg(getNextArgRequired()); + boolean cacheOnly = false; + + String opt; + while ((opt = getNextOption()) != null) { + switch (opt) { + case "--user": + userId = UserHandle.parseUserArg(getNextArgRequired()); + break; + case "--cache-only": + cacheOnly = true; + break; + default: + pw.println("Error: Unknown option: " + opt); + return 1; + } } String pkg = getNextArg(); @@ -2300,7 +2313,12 @@ class PackageManagerShellCommand extends ShellCommand { final int translatedUserId = translateUserId(userId, UserHandle.USER_NULL, "runClear"); final ClearDataObserver obs = new ClearDataObserver(); - ActivityManager.getService().clearApplicationUserData(pkg, false, obs, translatedUserId); + if (!cacheOnly) { + ActivityManager.getService() + .clearApplicationUserData(pkg, false, obs, translatedUserId); + } else { + mInterface.deleteApplicationCacheFilesAsUser(pkg, translatedUserId, obs); + } synchronized (obs) { while (!obs.finished) { try { @@ -4060,8 +4078,10 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" --user: remove the app from the given user."); pw.println(" --versionCode: only uninstall if the app has the given version code."); pw.println(""); - pw.println(" clear [--user USER_ID] PACKAGE"); - pw.println(" Deletes all data associated with a package."); + pw.println(" clear [--user USER_ID] [--cache-only] PACKAGE"); + pw.println(" Deletes data associated with a package. Options are:"); + pw.println(" --user: specifies the user for which we need to clear data"); + pw.println(" --cache-only: a flag which tells if we only need to clear cache data"); pw.println(""); pw.println(" enable [--user USER_ID] PACKAGE_OR_COMPONENT"); pw.println(" disable [--user USER_ID] PACKAGE_OR_COMPONENT");