Update interaction commands and add more shell commands

mz-dev
Zhuang Ma 8 years ago
parent a7f296a5ef
commit 1d3bf52ec8
  1. 175
      README.md

@ -2,7 +2,7 @@
ADB,即 [Android Debug Bridge](https://developer.android.com/studio/command-line/adb.html),它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。
持续更新中,欢迎补充指正,觉得有用的可以将 [此 GitHub 仓库](https://github.com/mzlogin/awesome-adb) Star 收藏。
持续更新中,欢迎补充指正,觉得有用的可以将 [此 GitHub 仓库](https://github.com/mzlogin/awesome-adb) Star 收藏备用
**注:**有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。
@ -73,12 +73,16 @@ ADB,即 [Android Debug Bridge](https://developer.android.com/studio/command-li
* [查看连接过的 WiFi 密码](#查看连接过的-wifi-密码)
* [设置系统日期和时间](#设置系统日期和时间)
* [重启手机](#重启手机)
* [使用 Monkey 进行压力测试](#使用-monkey-进行压力测试)
* [刷机相关命令](#刷机相关命令)
* [重启到 Recovery 模式](#重启到-recovery-模式)
* [从 Recovery 重启到 Android](#从-recovery-重启到-android)
* [重启到 Fastboot 模式](#重启到-fastboot-模式)
* [通过 sideload 更新系统](#通过-sideload-更新系统)
* [其它常用 adb shell 命令](#其它常用-adb-shell-命令)
* [更多 adb shell 命令](#更多-adb-shell-命令)
* [查看进程](#查看进程)
* [查看实时资源占用情况](#查看实时资源占用情况)
* [其它](#其它)
* [参考链接](#参考链接)
## 基本用法
@ -539,12 +543,46 @@ mFocusedActivity: ActivityRecord{8079d7e u0 com.cyanogenmod.trebuchet/com.androi
## 与应用交互
主要是使用 `am <command>` 命令,常用的 `<command>` 如下:
| command | 用途 |
|-----------------------------------|---------------------------------|
| `start [options] <INTENT>` | 启动 `<INTENT>` 指定的 Activity |
| `startservice [options] <INTENT>` | 启动 `<INTENT>` 指定的 Service |
| `broadcast [options] <INTENT>` | 发送 `<INTENT>` 指定的广播 |
| `force-stop <packagename>` | 停止 `<packagename>` 相关的进程 |
`<INTENT>` 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。
用于决定 intent 对象的选项如下:
| 参数 | 含义 |
|------------------|---------------------------------------------------------------------------------------------|
| `-a <ACTION>` | 指定 action,比如 `android.intent.action.VIEW` |
| `-c <CATEGORY>` | 指定 category,比如 `android.intent.category.APP_CONTACTS` |
| `-n <COMPONENT>` | 指定完整 component 名,用于明确指定启动哪个 Activity,如 `com.example.app/.ExampleActivity` |
`<INTENT>` 里还能带数据,就像写代码时的 Bundle 一样:
| 参数 | 含义 |
|---------------------------------------------------------------|----------------------------------------|
| `--esn <EXTRA_KEY>` | null 值(只有 key 名) |
| `-e\|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>` | string 值 |
| `--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>` | boolean 值 |
| `--ei <EXTRA_KEY> <EXTRA_INT_VALUE>` | integer 值 |
| `--el <EXTRA_KEY> <EXTRA_LONG_VALUE>` | long 值 |
| `--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>` | float 值 |
| `--eu <EXTRA_KEY> <EXTRA_URI_VALUE>` | URI |
| `--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>` | component name |
| `--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]` | integer 数组 |
| `--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]` | long 数组 |
### 调起 Activity
命令格式:
```sh
adb shell am start -n <packagename>/<activityname>
adb shell am start [options] <INTENT>
```
例如:
@ -555,12 +593,18 @@ adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示调起微信主界面。
```sh
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
```
表示调起 `org.mazhuang.boottimemeasure/.MainActivity` 并传给它 string 数据键值对 `toast - hello, world`
### 调起 Service
命令格式:
```sh
adb shell am startservice -n <packagename>/<servicename>
adb shell am startservice [options] <INTENT>
```
例如:
@ -573,7 +617,19 @@ adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAut
### 发送广播
// TODO
命令格式:
```sh
adb shell am broadcast [options] <INTENT>
```
例如:
```sh
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
```
表示向 `org.mazhuang.boottimemeasure/.BootCompletedReceiver` 发送一个 `BOOT_COMPLETED` 广播,这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。
### 强制停止应用
@ -1437,6 +1493,20 @@ date -s 20160823.131500
adb reboot
```
### 使用 Monkey 进行压力测试
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
简单用法:
```sh
adb shell monkey -p <packagename> -v 500
```
表示向 `<packagename>` 指定的应用程序发送 500 个伪随机事件。
Monkey 的详细用法参考 [官方文档](https://developer.android.com/studio/test/monkey.html)。
## 刷机相关命令
### 重启到 Recovery 模式
@ -1489,9 +1559,97 @@ adb reboot bootloader
adb sideload <path-to-update.zip>
```
## 其它常用 adb shell 命令
## 更多 adb shell 命令
Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 `adb shell` 里可以调用。本文档前面的部分内容已经用到了 `adb shell` 命令。
### 查看进程
命令:
```sh
adb shell ps
```
输出示例:
```sh
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 8904 788 ffffffff 00000000 S /init
root 2 0 0 0 ffffffff 00000000 S kthreadd
...
u0_a71 7779 5926 1538748 48896 ffffffff 00000000 S com.sohu.inputmethod.sogou:classic
u0_a58 7963 5926 1561916 59568 ffffffff 00000000 S org.mazhuang.boottimemeasure
...
shell 8750 217 10640 740 00000000 b6f28340 R ps
```
各列含义:
| 列名 | 含义 |
|------|-----------|
| USER | 所属用户 |
| PID | 进程 ID |
| PPID | 父进程 ID |
| NAME | 进程名 |
### 查看实时资源占用情况
命令:
```sh
adb shell top
```
输出示例:
```sh
User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307
PID PR CPU% S #THR VSS RSS PCY UID Name
8763 0 3% R 1 10640K 1064K fg shell top
131 0 3% S 1 0K 0K fg root dhd_dpc
6144 0 0% S 115 1682004K 115916K fg system system_server
132 0 0% S 1 0K 0K fg root dhd_rxf
1731 0 0% S 6 20288K 788K fg root /system/bin/mpdecision
217 0 0% S 6 18008K 356K fg shell /sbin/adbd
...
7779 2 0% S 19 1538748K 48896K bg u0_a71 com.sohu.inputmethod.sogou:classic
7963 0 0% S 18 1561916K 59568K fg u0_a58 org.mazhuang.boottimemeasure
...
```
各列含义:
| 列名 | 含义 |
|------|------------------------------------------------------------|
| PID | 进程 ID |
| PR | 优先级 |
| CPU% | 当前瞬间占用 CPU 百分比 |
| S | 进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
| #THR | 线程数 |
| VSS | Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) |
| RSS | Resident Set Size 实际使用物理内存(包含共享库占用的内存) |
| PCY | 调度策略优先级,SP_BACKGROUND/SPFOREGROUND |
| UID | 进程所有者的用户 ID |
| NAME | 进程名 |
`top` 命令还支持一些命令行参数,详细用法如下:
```sh
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num 最多显示多少个进程
-n num 刷新多少次后退出
-d num 刷新时间间隔(单位秒,默认值 5)
-s col 按某列排序(可用 col 值:cpu, vss, rss, thr)
-t 显示线程信息
-h 显示帮助文档
```
### 其它
Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 `adb shell` 里可以调用。本文档前面的部分内容已经用到了 `adb shell` 命令。如下是常用命令的简单描述,前文已经专门讲过的命令不再列举:
如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明
| 命令 | 功能 |
|-------|-----------------------------|
@ -1503,6 +1661,7 @@ Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 And
| mount | 挂载目录的查看和管理 |
| mv | 移动或重命名文件 |
| ps | 查看正在运行的进程 |
| rm | 删除文件 |
| top | 查看进程的资源占用情况 |
## 参考链接
@ -1514,3 +1673,5 @@ Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 And
* [adb 命令行的使用记录](https://github.com/ZQiang94/StudyRecords/blob/master/other/src/main/java/com/other/adb%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95.md)
* [Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)](http://www.jianshu.com/p/860bc2bf1a6a)
* [那些做Android开发必须知道的ADB命令](http://yifeiyuan.me/2016/06/30/ADB%E5%91%BD%E4%BB%A4%E6%95%B4%E7%90%86/)
* [adb shell top](http://blog.csdn.net/kittyboy0001/article/details/38562515)
* [像高手一样使用ADB命令行(2)](http://cabins.github.io/2016/03/25/UseAdbLikeAPro-2/)

Loading…
Cancel
Save