可以通過adb shell進入Android的Linux命令界面,輸入am -help查看詳細的命令。先介紹幾個簡單的用法。
命令格式如下
命令列表:
原理分析:在Am.java,am命令現實的實現幾乎都是通過調用ActivityManagerService的對應方法來完成的,am monitor除外。比如前面概述中介紹的命令am start-a Android . intention . action . view-d,最後通過調用ActivityManagerService類的startActivityAsUser()方法啟動activityis。再比如am kill-all命令,最終的實現是由ActivityManagerService的killBackgroundProcesses()方法完成的。
我們來談談[選項]和
主要啟動活動命令amstart[選項]
啟動Activity的實現原理:如果有-W參數,調用startActivityAndWait運行,否則startActivityAsUser()。
命令
例如,對pid=12345的進程,發出level=RUNNING_LOW的內存緊縮命令。
level的取值範圍為:隱藏、running _ modern、後臺、RUNNING_LOW、modern、RUNNING_CRITICAL、完整。
am子命令的可選參數start service、stop service、broadcast、kill、profile start、profile stop和dump heap都允許設置為-user
例如,啟動id=10001的用戶的指定服務。
有許多意圖和標誌的參數。為了方便起見,這裏有三種類型的參數:公共參數、額外參數和標誌參數。
例子
(1).基本類型
參數es是額外字符串的首字母縮寫。示例:
(2).數組類型
參數eia是Extra int array的首字母縮寫,多個value值之間用逗號分隔。示例:
(3).數組列表類型
參數efal是Extra float數組列表的首字母,多個值之間用逗號分隔。示例:
Pm工具是包管理器的簡稱。可以使用pm工具安裝應用,查詢應用寶信息,系統權限,控制應用。pm工具是Android開發和測試過程中不可或缺的工具。shell命令格式如下:
原理分析:pm命令的實現在Pm.java,最後大部分都是通過調用PackageManagerService的相應方法來完成的。disbale之後,我在桌面和應用列表中看到了錯誤的應用。
看看所有的包裹,
[選項]參數:
禁用+啟用=應用程序總數;系統+第三方=應用總數。
要查看第三方應用程序:
查看已禁用的包名。
& lt過濾器& gt參數
當FILTER不為空時,只輸出包名中有FILTER字段的應用;當FILTER為空時,默認情況下將顯示所有符合條件的應用程序。
例如,查看帶有天氣字段的包名稱。
[選項]參數:
& lt路徑& gt參數:apk需要安裝的路徑。
Dumpsys是Android自帶的壹個強大的調試工具。從名字就可以看出,主要是用來轉儲當前android系統的壹些信息,是分析手機問題、運行狀態、使用情況的壹種非常有效的手段。
實現原則
dumpsys的源代碼結構其實很簡單,只有壹個dumpsys.cpp。
/frameworks/native/cmds/dump sys/dump sys . CPP
首先通過defaultServiceManager()函數獲取ServiceManager對象,然後通過函數checkService根據dumpsys傳入的參數找到具體的服務,執行服務的dump方法,達到轉儲服務的目的。
不同的Android系統版本支持的命令是不壹樣的。可以通過下面的命令檢查當前手機支持的轉儲服務,先進入adb shell,然後執行下面的命令:dumpsys -l l .這些服務名可能不知道調用的是哪個服務,但是可以通過下面的指令得到指示:服務列表。
有許多服務列表。以下是其中的幾個。
可以通過以下命令打印特定的服務:dumpsys
接下來我主要講壹下dumpsys activity的用法。
命令
選項可選值
Dumpsys活動相當於順序輸出以下七條指令:
Cmd可選值
命令
返回結果
以上輸出結果可以分為以下四個部分。
您也可以只輸出pid或包的過程信息:
以AmberLocker為例進行分析。
場景1:查詢壹個App的所有服務狀態。
解釋:服務類的名字是com。amber . lock screen . locker heartservice,包名是mobi . info life . ez weather . locker . locker _ 2,baseDir(apk路徑)是/data/app/mobi . info life . ez weather . locker . locker _ 2-2/base . apk。
它運行在進程pid=1115中,進程名為mobi . info life . ez weather . locker _ 2,uid=10060,以及創建時間等信息。
場景二:查詢壹個App的所有播放狀態。
場景三:查詢壹個App的所有活動狀態。
場景4:查詢壹個App的流程狀態。
格式:ProcessRecord{Hashcode pid:進程名/uid},進程pid=941,進程名mobi . info life . ez weather . locker . locker _ 2:live,uid=10060。
還有服務、連接、提供者、接收者,
場景5:查詢堆棧的頂層活動
dumpsys的訂單還有很多,這裏就不壹壹列舉了。