一、pm命令介紹與包名信息查詢
1.pm命令介紹
pm工具為包管理(package manager)的簡稱
可以使用pm工具來執行應用的安裝和查詢應用寶的信息、系統權限、控制應用
pm工具是Android開發與測試過程中必不可少的工具,shell命令格式如下:
pm <command>
2.包名信息查詢
shell模式下:
pm list packages [options] [FILTER]
打印所有的已經安裝的應用的包名,如果設置了文件過濾則值顯示包含過濾文字的內容
參數 |
描述 |
-f | 顯示每個包的文件位置 |
-d | 使用過濾器,只顯示禁用的應用的包名 |
-e | 使用過濾器,只顯示可用的應用的包名 |
-s | 使用過濾器,只顯示系統應用的包名 |
-3 | 使用過濾器,只顯示第三方應用的包名 |
-i | 查看應用的安裝者 |
二、權限信息查詢
1.權限基礎
權限的組成:權限的名稱,屬於的權限組,保護級別
例如:
<permission android:description="string resource" android:icon="drable resource" android:label="string resource" android:name="string" android:permissionGroup="string" android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>
protectionLevel |
說明 |
normal | 表示權限是低風險的,不會對系統,用戶或其他應用程序造成危害 |
dangerous | 表示權限是高風險的,系統將可能要球用戶輸入相關信息,才會授予此權限 |
signature | 表示只有當應用程序所用數字簽名與聲明引用權限的應用程序所用簽名相同時,才能將權限授予給它 |
signatureOrSystem | 需要簽名或者系統級應用(放置在/system/app目錄下)才能賦予權限 |
system | 系統級應用(放置在/system/app目錄下)才能賦予權限 |
自定義權限 | 應用自行定義的權限 |
2.權限查詢
shell模式下:
pm list permission-groups
#打印所有已知的權限組
pm list permissions [options] [GROUP]
#打印權限
參數可以組合使用例如:pm list permissions –g -d
參數 |
說明 |
-g | 按組進行列出權限 |
-f | 打印所有信息 |
-s | 簡短的摘要 |
-d | 只有危險的權限列表 |
-u | 只有權限的用戶將看到列表 用戶自定義權限 |
3.授權與取消
注意:目標apk的minSdkVersion、targetSdkVersion也必需為23及以上
子命令 |
說明 |
grant <package_name> <permission> | 授予應用權限許可。必需android6.0(API級別23)以上的設備 |
revoke <package_name> <permission> | 撤銷應用權限。必需android6.0(API級別23)以上的設備 |
例如:
需要注意的是所謂的授權是指你的apk里面已有的權限進行授權,相當於啟用的概念
adb shell pm grant <packageName> android.permission.READ_CONTACTS #授權( 取消權限同理)
三、其他信息查詢
1.測試包與apk路徑查詢
pm
子命令 |
參數 |
說明 |
list instrymentation | 無參數 | 列出所有的instrumentation測試包 |
-f | 列出apk文件位置 | |
<target_package> | 列出某個app的測試包 | |
path <package> | <package> | 打印指定包名的apk路徑 |
例如:
adb shell pm list instrumentation
adb shell pm list instrumentation TARGET_PACKAGE
adb shell pm path PACKAGE_NAME
2.系統功能與支持庫查詢
pm
子命令 |
說明 |
list feature | 打印系統的所有功能 列出所有硬件相關信息 |
list libraries | 打印當前設備所支持的所有庫 |
例如:
adb shell pm list feature
3.打印包的系統狀態信息
pm dump PACKAGE
打印給定的包的系統狀態
打印內容 |
說明 |
DUMP OF SERVICE package | 打印服務信息 |
DUMP OF SERVICE activity | 打印activity信息 |
DUMP OF SERVICE meminfo | 打印當前內存使用信息 |
DUMP OF SERVICE procstats | 打印系統內存使用與一段時間內存匯總 |
DUMP OF SERVICE usagestats | 打印服務器使用狀態信息 |
DUMP OF SERVICE batterystats | 打印電池狀態信息 |
例如:
adb shell pm dump PACKAGE_NAME
四、安裝與卸載
1.安裝
pm install [-lrtsfd] [-i PACKAGE] [PATH]
通過指定路徑安裝apk到手機中(與adb install不同的是adb install安裝的.apk是在你的電腦上,而pm install安裝的apk是存儲在你的手機中)
參數 |
說明 |
-l | 鎖定應用程序 |
-r | 重新安裝應用,且保留應用數據 |
-t | 允許測試apk被安裝 |
-i <INSTALLER_PACKAGE_NAME> | 指定安裝包的包名 |
-s | 安裝到sd卡 |
-f | 安裝到系統內置存儲中(默認安裝位置) |
-d | 允許降級安裝(同一應用低級換高級) |
-g | 授予應用程序清單中列出的所有權限(只有6.0系統可用) |
首先將test.apk文件push到手機目錄中比如/data/local/tmp
adb shell pm install /data/local/tmp/test.apk #安裝
adb shell pm install –r /data/local/tmp/test.apk #重新安裝
2.卸載
pm uninstall [options] <PACKAGE>
#卸載應用
參數 |
說明 |
-k | 卸載應用且保留數據與緩存(如果不加-k則全部刪除) |
五、控制命令
1.清除應用數據
pm clear <PACKAGE_NAME>
2.禁用和啟用應用
pm
只有系統應用才可以用,第三方應用不行
子命令 |
說明 |
enable <PACKAGE_OR_COMPONENT> | 使package或component可用 |
disenable <PACKAGE_OR_COMPONENT> | 使package或component不可用(直接就找不到應用了) |
disenable-user [options] <PACKAGE_OR_COMPONENT> | 使package或component不可用(會顯示已停用) |
3.隱藏與恢復應用
pm
被隱藏應用在應用管理中變得不可見,桌面圖標也會消失
子命令 |
說明 |
hide PACKAGE_OR_COMPONENT | 隱藏package或component |
unhide PACKAGE_OR_CONPONENT | 恢復可見package或component |
4.控制應用的默認安裝位置
pm
需要root權限
子命令 |
說明 |
set-install-location <LOCATION> | 更改默認的安裝位置: 0:自動-讓系統決定最好的位置 1:內部存儲-安裝在內部設備上的存儲 2:外部存儲-安裝在外部媒體 注:只用於調試,不要瞎搞 |
get-install-localtion | 返回當前的安裝位置 0 1 2 對應上面的數字說明 |