一、Pm命令
1. 命令列表
$ pm <command>
命令 | 功能 | 實現方法 |
---|---|---|
list packages | 列舉app包信息 | PMS.getInstalledPackages |
install [options ] <PATH > |
安裝應用 | PMS.installPackageAsUser |
uninstall [options ]<package > |
卸載應用 | IPackageInstaller.uninstall |
enable <包名或組件名 > |
enable | PMS.setEnabledSetting |
disable <包名或組件名 > |
disable | PMS.setEnabledSetting |
hide <package > |
隱藏應用 | PMS.setApplicationHiddenSettingAsUser |
unhide <package > |
顯示應用 | PMS.setApplicationHiddenSettingAsUser |
get-install-location | 獲取安裝位置 | PMS.getInstallLocation |
set-install-location | 設置安裝位置 | PMS.setInstallLocation |
path <package > |
查看App路徑 | PMS.getPackageInfo |
clear <package > |
清空App數據 | AMS.clearApplicationUserData |
get-max-users | 最大用戶數 | UserManager.getMaxSupportedUsers |
force-dex-opt <package > |
dex優化 | PMS.forceDexOpt |
dump <package > |
dump信息 | AM.dumpPackageStateStatic |
trim-caches <目標size > |
緊縮cache目標大小 | PMS.freeStorageAndNotify |
pm命令實的實現方式在Pm.java,最后大多數都是調用PackageManagerService
相應的方法來完成的。disbale之后,在桌面和應用程序列表里邊都看到不該app。
2. pm list packages命令
查看所有的package:
$ list packages [options] <FILTER>
[options]參數:
-f: 顯示包名所關聯的文件;
-d: 只顯示disabled包名;
-e: 只顯示enabled包名;
-s: 只顯示系統包名;
-3: 只顯示第3方應用的包名;
-i: 包名所相應的installer;
-u: 包含uninstalled包名.
規律: disabled + enabled = 總應用個數; 系統 + 第三方 = 總應用個數。
比如:查看第3方應用:
$ pm list packages -3
又比如,查看已經被禁用的包名。(國內的廠商一般把google的服務禁用了)
$ pm list packages -d
<FILTER>參數:
當FILTER為不為空時,則只會輸出包名帶有FILTER字段的應用;當FILTER為空時,則默認顯示所有滿足條件的應用。
查看包名帶google字段的包名:
$ pm list packages google
3. pm install命令
安裝應用:
$ pm install [options] <PATH>
其中[options]參數:
-r: 覆蓋安裝已存在Apk,並保持原有數據;
-d: 運行安裝低版本Apk;
-t: 運行安裝測試Apk
-i : 指定Apk的安裝器;
-s: 安裝apk到共享快存儲,比如sdcard;
-f: 安裝apk到內部系統內存;
-l: 安裝過程,持有轉發鎖
-g: 准許Apk manifest中的所有權限;
PATH參數:
該參數是必須的,是指需要安裝的apk所在的路徑。
4. 其他參數
pm list users //查看當前手機用戶
pm list libraries //查看當前設備所支持的庫
pm list features //查看系統所有的features
pm list instrumentation //所有測試包的信息
pm list permission-groups //查看所有的權限組
pm list permissions [options] <group> 查看權限
-g: 以組形式組織;
-f: 打印所有信息;
-s: 簡要信息;
-d: 只列舉危險權限;
-u: 只列舉用戶可見的權限。