接著前幾天寫的ADB常用命令總結(jié)?續(xù)。
????接下來寫一些和應(yīng)用交互的一些命令,格式如?adb shell ?am <command>。
????adb shell 我總結(jié)分為?am命令 和 pm命令。
????那么 adb命令和adb shell命令有什么區(qū)別呢?adb命令是adb這個程序自帶的一些命令,而adb shell則是調(diào)用的Android系統(tǒng)中的命令,這些Android特有的命令都放在了Android設(shè)備的系統(tǒng)/ bin目錄下。通過這些命令可以和Android系統(tǒng)的一些軟件交互。其實上一篇文章已經(jīng)有過一些adb shell 命令了。比如adb shell pm list packages 查看應(yīng)用
Activity Manage
am 即 Activity Manage .使用它可以啟動一個Activity 、Service 、Broadcast?
主要是使用?am <command>?命令,常用的?<command>?如下:

<INTENT>?參數(shù)很靈活,和寫 Android 程序時代碼里的 Intent 相對應(yīng),參數(shù)如下:
-a <ACTION> ? ?指定 action,比如?android.intent.action.VIEW
-c <CATEGORY>指定 category,比如?android.intent.category.APP_CONTACTS
-n <COMPONENT> ?指定完整 component 名,用于明確指定啟動哪個 Activity,如?com.example.app/.ExampleActivity
<INTENT>?里還能帶數(shù)據(jù),就像寫代碼時的 Bundle 一樣
1.?調(diào)起 Activity
adb shell am start [options] <INTENT>
比如:adb shell am start -n com.tencent.mm/.ui.LauncherUI ?調(diào)用微信的界面
2.調(diào)起 Service/停止 Service
adb shell am startservice [options] <INTENT> ??調(diào)起 Service
adb shell am stopservice [options] <INTENT>
比如:adb shell am startservice -n com.tencent.mm/.**.Service
adb shell am stopservice??-n com.tencent.mm/.**.Service
調(diào)用微信下的某個Service
3.發(fā)送廣播
adb shell am broadcast [options] <INTENT>
發(fā)送廣播可以是向所有組件發(fā)送廣播,也可以是只向某個組件發(fā)送一個廣播
向所有組件發(fā)送一個BOOT_COMPLETED廣播:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
向單個組件發(fā)送一個BOOT_COMPLETED廣播:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n cn.com.quickpark/.MyBrocastReceiver
使用 -a 廣播名 -n 接收的Receiver 。這一條am 命令很使用 比如說我們的開機廣播、電量廣播比較難捕獲,可以自己發(fā)送一條廣播,就很容易測試我們的程序
下面是可以用adb發(fā)送的廣播


4.停止某個應(yīng)用
adb shell am force-stop <packagename>
比如:adb shell am force-stop cn.com.quickpark ,表示停止cn.com.quickpark 下的一切進(jìn)程
Package Manage
pm 即 Package Manage,用于和一些應(yīng)用相關(guān)的命令
1.查看設(shè)備所有的應(yīng)用
adb shell pm list packages

添加過濾參數(shù)
在后面 添加一個命令過濾 比如只查看系統(tǒng)應(yīng)用:
adb shell pm list packages -s
只查看第三方應(yīng)用:
adb shell pm list packages -3
包名包含某字符串的應(yīng)用:
查看包名包含字符串 tencent 的應(yīng)用列表
adb shell pm list packages tencent?

2.清除應(yīng)用數(shù)據(jù)與緩存
adb shell pm clear <packagename>
效果相當(dāng)于在設(shè)置里的應(yīng)用信息界面點擊了「清除緩存」和「清除數(shù)據(jù)」。比如:adb shell pm clear com.qihoo360.mobilesafe?清除 360 手機衛(wèi)士的數(shù)據(jù)和緩存
3.查看應(yīng)用安裝路徑
adb shell pm path <PACKAGE>
比如:
adb shell pm path cn.com.quickpark 。輸出package:/data/app/cn.com.quickpark-1.apk
模擬按鍵/輸入(input)
另外 還有一個比較實用的功能就是input。開發(fā)中可以用它方便很多操作。格式如下:
input [<source>] <command> [<arg>...]
查看 input?命令的完整 help 信息如下:

比如使用?adb shell input keyevent <keycode>?命令,不同的 keycode 能實現(xiàn)不同的功能,部分Keycode如下:

按一次電源鍵
adb shell input keyevent 26
菜單鍵
adb shell input keyevent 82
滑動解鎖
如果鎖屏沒有密碼,是通過滑動手勢解鎖,那么可以通過?input swipe?來解鎖。
命令(參數(shù)以機型 Nexus 5,向上滑動手勢解鎖舉例):
adb shell input swipe 300 1000 300 500
參數(shù)?300 1000 300 500?分別表示起始點x坐標(biāo) 起始點y坐標(biāo) 結(jié)束點x坐標(biāo) 結(jié)束點y坐標(biāo)
查看日志
Android 系統(tǒng)的日志分為兩部分,底層的 Linux 內(nèi)核日志輸出到 /proc/kmsg,Android 的日志輸出到 /dev/log
[adb] logcat [<option>] ... [<filter-spec>] ...
內(nèi)核日志
adb shell dmesg

中括號里的?[14201.684016]?代表內(nèi)核開始啟動后的時間,單位為秒。
通過內(nèi)核日志我們可以做一些事情,比如衡量內(nèi)核啟動時間,在系統(tǒng)啟動完畢后的內(nèi)核日志里找到?Freeing init memory?那一行前面的時間就是