通过ad执行pm命令,可以做很多事,拿下系统代码
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java,pm命令处理部分,具体参数去搜索:
public int onCommand(String cmd) {
if (cmd == null) {
return handleDefaultCommands(cmd);
}
final PrintWriter pw = getOutPrintWriter();
try {
switch (cmd) {
case "path":
return runPath();
case "dump":
return runDump();
case "list":
return runList();
case "gc":
return runGc();
case "resolve-activity":
return runResolveActivity();
case "query-activities":
return runQueryIntentActivities();
case "query-services":
return runQueryIntentServices();
case "query-receivers":
return runQueryIntentReceivers();
case "install":
return runInstall();
case "install-streaming":
return runStreamingInstall();
case "install-incremental":
return runIncrementalInstall();
case "install-abandon":
case "install-destroy":
return runInstallAbandon();
case "install-commit":
return runInstallCommit();
case "install-create":
return runInstallCreate();
case "install-remove":
return runInstallRemove();
case "install-write":
return runInstallWrite();
case "install-existing":
return runInstallExisting();
case "set-install-location":
return runSetInstallLocation();
case "get-install-location":
return runGetInstallLocation();
case "install-add-session":
return runInstallAddSession();
case "move-package":
return runMovePackage();
case "move-primary-storage":
return runMovePrimaryStorage();
case "compile":
return runCompile();
case "reconcile-secondary-dex-files":
return runreconcileSecondaryDexFiles();
case "force-dex-opt":
return runForceDexOpt();
case "bg-dexopt-job":
return runDexoptJob();
case "cancel-bg-dexopt-job":
return cancelBgDexOptJob();
case "delete-dexopt":
return runDeleteDexOpt();
case "dump-profiles":
return runDumpProfiles();
case "snapshot-profile":
return runSnapshotProfile();
case "uninstall":
return runUninstall();
case "clear":
return runClear();
case "enable":
return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
case "disable":
return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
case "disable-user":
return runSetEnabledSetting(
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER);
case "disable-until-used":
return runSetEnabledSetting(
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED);
case "default-state":
return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
case "hide":
return runSetHiddenSetting(true);
case "unhide":
return runSetHiddenSetting(false);
case "suspend":
return runSuspend(true);
case "unsuspend":
return runSuspend(false);
case "set-distracting-restriction":
return runSetDistractingRestriction();
case "grant":
return runGrantRevokePermission(true);
case "revoke":
return runGrantRevokePermission(false);
case "reset-permissions":
return runResetPermissions();
case "set-permission-flags":
return setOrClearPermissionFlags(true);
case "clear-permission-flags":
return setOrClearPermissionFlags(false);
case "set-permission-enforced":
return runSetPermissionEnforced();
case "get-privapp-permissions":
return runGetPrivappPermissions();
case "get-privapp-deny-permissions":
return runGetPrivappDenyPermissions();
case "get-oem-permissions":
return runGetOemPermissions();
case "trim-caches":
return runTrimCaches();
case "create-user":
return runCreateUser();
case "remove-user":
return runRemoveUser();
case "set-user-restriction":
return runSetUserRestriction();
case "get-max-users":
return runGetMaxUsers();
case "get-max-running-users":
return runGetMaxRunningUsers();
case "set-home-activity":
return runSetHomeActivity();
case "set-installer":
return runSetInstaller();
case "get-instantapp-resolver":
return runGetInstantAppResolver();
case "has-feature":
return runHasFeature();
case "set-harmful-app-warning":
return runSetHarmfulAppWarning();
case "get-harmful-app-warning":
return runGetHarmfulAppWarning();
case "get-stagedsessions":
return runListStagedSessions();
case "uninstall-system-updates":
String packageName = getNextArg();
return uninstallSystemUpdates(packageName);
case "rollback-app":
return runRollbackApp();
case "get-moduleinfo":
return runGetModuleInfo();
case "log-visibility":
return runLogVisibility();
case "bypass-staged-installer-check":
return runBypassStagedInstallerCheck();
case "bypass-allowed-apex-update-check":
return runBypassAllowedApexUpdateCheck();
case "set-silent-updates-policy":
return runSetSilentUpdatesPolicy();
default: {
Boolean domainVerificationResult =
mDomainVerificationShell.runCommand(this, cmd);
if (domainVerificationResult != null) {
return domainVerificationResult ? 0 : 1;
}
String nextArg = getNextArg();
if (nextArg == null) {
if (cmd.equalsIgnoreCase("-l")) {
return runListPackages(false);
} else if (cmd.equalsIgnoreCase("-lf")) {
return runListPackages(true);
}
} else if (getNextArg() == null) {
if (cmd.equalsIgnoreCase("-p")) {
return displayPackageFilePath(nextArg, UserHandle.USER_SYSTEM);
}
}
return handleDefaultCommands(cmd);
}
}
} catch (RemoteException e) {
pw.println("Remote exception: " + e);
}
return -1;
}