0%

adb常用命令

本文约定

  • “$”后的为输入的命令,命令行下面的是执行结果
  • 带有”(root)”,表示此命令需要root权限才能执行

基本用法

查询已连接设备

1
2
3
4
$ adb devices
List of devices attached
H6178201701131 device
A3668YG61A300066 device

通过USB 连接设备

1
2
$ adb remount
remount succeeded

如果同时有多台设备连接到电脑,直接remount会报如下错误:

1
2
$ adb remount
error: more than one device and emulator

需要通过”-s”指定设备:

1
2
$ adb -s H6178201701131 remount
remount succeeded

同理,当存在多个设备时执行其它adb命令,也需要”-s”指定设备。

启动 adb server

1
2
3
$ adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

停止 adb server

1
$ adb kill-server

查看adb 版本号

1
2
$ adb version
Android Debug Bridge version 1.0.32

以 root 权限运行 adbd

1
2
$ adb root
adbd is already running as root

一般是userdebug版本会经常用到此命令, user版本会报如下错误:

1
2
$ adb root
adbd cannot run as root in production builds

查看设备信息

版本编译类型(user、userdebug、eng)

1
2
$ adb shell getprop ro.build.type
userdebug

型号

1
2
$ adb shell getprop ro.product.model
Nexus 6

更多ro.product属性说明请查看:ro.product 属性说明

Android 系统版本

1
2
$ adb shell getprop ro.build.version.release
7.0

屏幕分辨率

1
2
$ adb shell wm size
Physical size: 720x1280

屏幕密度

1
2
$ adb shell wm density
Physical density: 320

CPU 信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$ adb shell cat /proc/cpuinfo
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
model name : AArch64 Processor rev 4 (aarch64)
BogoMIPS : 26.00
BogoMIPS : 26.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

processor : 1
model name : AArch64 Processor rev 4 (aarch64)
BogoMIPS : 26.00
BogoMIPS : 26.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

processor : 2
model name : AArch64 Processor rev 4 (aarch64)
BogoMIPS : 26.00
BogoMIPS : 26.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

processor : 3
model name : AArch64 Processor rev 4 (aarch64)
BogoMIPS : 26.00
BogoMIPS : 26.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

Hardware : MT6737

可以看到:
名字:MT6737
架构:AArch64 Processor rev 4 (aarch64)
核心:四核(processor 0 ~ 3)

内存信息

方法1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ adb shell cat /proc/meminfo
MemTotal: 1947040 kB
MemFree: 38408 kB
MemAvailable: 1340344 kB
Buffers: 13448 kB
Cached: 1313284 kB
SwapCached: 0 kB
Active: 667848 kB
Inactive: 988680 kB
Active(anon): 287924 kB
Inactive(anon): 46192 kB
Active(file): 379924 kB
Inactive(file): 942488 kB
Unevictable: 3324 kB
Mlocked: 256 kB
SwapTotal: 973516 kB
SwapFree: 973516 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 333028 kB
Mapped: 335756 kB
Shmem: 1304 kB
Slab: 74400 kB
SReclaimable: 29588 kB
SUnreclaim: 44812 kB
KernelStack: 20192 kB
PageTables: 20236 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1947036 kB
Committed_AS: 27754008 kB
VmallocTotal: 260046784 kB
VmallocUsed: 363272 kB
VmallocChunk: 259579636 kB

方法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$ adb shell dumpsys meminfo
Applications Memory Usage (in Kilobytes):
Uptime: 472289 Realtime: 472289

Total PSS by process:
78,255K: system (pid 791)
69,105K: com.android.chrome (pid 4800 / activities)
65,042K: com.android.chrome:sandboxed_process0 (pid 4835)
56,801K: com.google.android.gms (pid 3003)
省略...

Total PSS by OOM adjustment:
198,745K: Native
33,056K: surfaceflinger (pid 234)
30,039K: zygote (pid 356)
省略...
78,255K: System
78,255K: system (pid 791)
96,264K: Persistent
56,785K: com.android.systemui (pid 1072)
22,722K: com.android.phone (pid 1349)
省略...
190,727K: Foreground
69,105K: com.android.chrome (pid 4800 / activities)
65,042K: com.android.chrome:sandboxed_process0 (pid 4835)
56,580K: com.android.chrome:privileged_process0 (pid 4872)
142,166K: Visible
56,801K: com.google.android.gms (pid 3003)
43,858K: com.google.android.gms.persistent (pid 1671)
省略...
17,007K: Perceptible
9,846K: com.android.inputmethod.latin (pid 1061)
7,161K: com.mediatek.mtklogger (pid 2429)
20,071K: A Services
8,579K: com.android.mms (pid 2698)
7,459K: ru.appspress.showcase (pid 3695)
4,033K: com.mediatek.schpwronoff (pid 3540)
33,280K: Home
33,280K: com.android.launcher3 (pid 1822 / activities)
26,343K: B Services
12,458K: android.process.media (pid 1635)
6,203K: com.android.gallery3d (pid 1808)
19,048K: Cached
6,349K: com.google.process.gapps (pid 4918)
4,433K: com.android.providers.partnerbookmarks (pid 5039)

Total PSS by category:
126,495K: .dex mmap
112,428K: .so mmap
110,112K: Native
省略...

Total RAM: 1,947,040K (status normal)
Free RAM: 976,604K ( 19,048K cached pss + 874,684K cached kernel + 63,352K free + 528K ion cached + 18,992K gpu cached)
Used RAM: 978,270K ( 802,858K used pss + 165,748K kernel + 28K trace buffer + 9,636K ion disp + 0K cma usage)
Lost RAM: -7,846K
ZRAM: 12K physical used for 0K in swap ( 973,516K total swap)
Tuning: 128 (large 256), oom 322,560K, restore limit 107,520K (high-end-gfx)

查看电池信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ adb shell dumpsys battery
Current Battery Service state:
AC powered: false # 充电器充电
USB powered: true # USB充电
Wireless powered: false # 无线充电
Max charging current: 0 # 最大充电电流
Max charging voltage: 0 # 最大充电电压
Charge counter: 0 # integer containing the charge counter present in the battery.
status: 2 # 电池状态:2 - 充电状态 ,其他数字为非充电状态
health: 2 # 电池健康状态:只有数字2表示good
present: true # 电池是否在机身里
level: 33 # 当前电池电量百分比
scale: 100 # 电池电量最大百分比
voltage: 3848 # 电池电压,这里的3848表示3.848V
temperature: 310 # 电池温度,单位是0.1摄氏度
technology: Li-ion # 电池种类,这里是常见的Li-ion 锂电池

具体定义信息请查看代码: frameworks/base/core/java/android/os/BatteryManager.java

查看连接过的 WiFi 密码(root)

1
2
3
4
5
6
7
$ adb shell cat /data/misc/wifi/*.conf
network={
ssid="TP-LINK_9DFC"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}

ssid 和 psk 就是无线的名字和密码了。

IP 地址

1
2
3
4
$ adb shell ifconfig | grep Mask
inet addr:192.168.253.21 Bcast:192.168.253.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0

192.168.253.21 就是当前设备的IP地址。

修改设备设置

注:修改设置之后如果运行有问题或者想恢复,可以重启设备。

分辨率

1
$ adb shell wm size [reset|WxH|WdpxHdp]

示例,将屏幕分辨率调整为480*720

1
$ adb shell wm size 480x720

恢复原分辨率

1
$ adb shell wm size reset

显示区域

1
$ adb shell wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]

注意,[LEFT,TOP,RIGHT,BOTTOM] 指的是距离屏幕边缘多少个像素。
示例,在屏幕上方留100px空白

1
adb shell wm overscan 0,100,0,0

恢复原显示区域

1
adb shell wm overscan reset

关闭 USB 调试模式

1
$ adb shell settings put global adb_enabled 0

充电时手机常亮

1
$ adb shell settings put global stay_on_while_plugged_in 3

灭屏时间30分钟

1
$ adb shell settings put system screen_off_timeout 1800000

更多设置项

1
2
3
4
5
6
7
8
$ adb shell settings
usage: settings [--user NUM] get namespace key
settings [--user NUM] put namespace key value
settings [--user NUM] delete namespace key
settings [--user NUM] list namespace

'namespace' is one of {system, secure, global}, case-insensitive
If '--user NUM' is not given, the operations are performed on the owner user.

首先settings list namespace列出都有哪些设置,
其次settings get namespace key看当前值,
最后settings put namespace key value设定新的值。

文件管理

复制电脑里的文件到设备

命令:

1
adb push <local> <remote>

示例:

1
2
3
4
5
6
7
8
9
# 将pc-folder/filea.a 拷贝到设备phone-folder目录下
$ adb push pc-folder/filea.a /sdcard/phone-folder/

# 将pc-folder中的所有文件拷贝到设备phone-folder目录下
$ adb push pc-folder/ /sdcard/phone-folder/
push: pc-folder/fileb.b -> /sdcard/phone-folder/fileb.b
push: pc-folder/filea.a -> /sdcard/phone-folder/filea.a
push: pc-folder/filec.c -> /sdcard/phone-folder/filec.c
3 files pushed. 0 files skipped.

复制设备里的文件到电脑

命令:

1
adb pull <remote> [<local>]

如果省略,则将文件拷贝到当前目录下。
示例:

1
2
3
4
5
6
7
8
9
10
# 将设备phone-folder/filea.a拷贝到pc-folder中
$ adb pull /sdcard/phone-folder/filea.a pc-folder/

# 将设备phone-folder中的所有文件拷贝到pc-folder文件夹中
$ adb pull /sdcard/phone-folder/ pc-folder/
pull: building file list...
pull: /sdcard/phone-folder/filec.c -> pc-folder/filec.c
pull: /sdcard/phone-folder/fileb.b -> pc-folder/fileb.b
pull: /sdcard/phone-folder/filea.a -> pc-folder/filea.a
3 files pulled. 0 files skipped.

模拟按键/输入

模拟按键/输入主要是通过adb shell input命令来完成,它的完整帮助如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ adb shell input
Usage: input [<source>] <command> [<arg>...]

The sources are:
keyboard
mouse
joystick
touchnavigation
touchpad
trackball
dpad
stylus
gamepad
touchscreen

The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)

模拟按键一般是通过adb shell input keyevent <keycode>命令完成,keycode完整定义可以参考frameworks/base/core/java/android/view/KeyEvent.java文件或者KeyEvent。常用按键定义如下:

Keycode 含义 Keycode 含义
3 HOME 键 122 移动光标到行首或列表顶部
4 返回键 123 移动光标到行末或列表底部
5 打开拨号应用 126 恢复播放
6 挂断电话 127 暂停播放
24 增加音量 164 静音
25 降低音量 187 切换应用
26 电源键 207 打开联系人
27 拍照(需要在相机应用里) 208 打开日历
64 打开浏览器 209 打开音乐
82 菜单键 210 打开计算器
85 播放/暂停 220 降低屏幕亮度
86 停止播放 221 提高屏幕亮度
87 播放下一首 223 系统休眠
88 播放上一首 224 点亮屏幕

HOME 键

1
$ adb shell input keyevent 3

返回键

1
$ adb shell input keyevent 4

电源键

1
$ adb shell input keyevent 26

点亮屏幕

1
$ adb shell input keyevent 224

更多按键输入请参考上面的keycode定义

输入文本

在焦点处于某文本框时,可以通过 input 命令来输入文本:

1
$ adb shell input text "Hi, How are you ?"

输入网址的时候用这个是个不错的注意!

模拟点击触摸屏

比如我想模拟点击屏幕坐标为(200,500)的点:

1
$ adb shell input tap 200 500

应用管理

查看应用列表

命令:

1
2
3
4
5
6
7
8
9
10
11
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

Options:
-f: 显示应用关联的 apk 文件
-d: 只显示 disabled 的应用
-e: 只显示 enabled 的应用
-s: 只显示系统应用
-3: 只显示第三方应用
-i: 显示应用的 installer
-u: 包含已卸载应用
<FILTER>: 只显示包名包含<FILTER>的应用

所有应用

1
2
3
4
5
6
7
8
$ adb shell pm list packages
package:ru.appspress.showcase
package:com.android.fmradio
package:com.mediatek.gba
package:com.mediatek.ims
package:com.android.cts.priv.ctsshim
package:com.google.android.youtube
...

系统应用

1
2
3
4
5
6
$ adb shell pm list packages -s
package:com.android.fmradio
package:com.mediatek.gba
package:com.mediatek.ims
package:com.android.cts.priv.ctsshim
...

第三方应用

1
2
3
4
5
$ adb shell pm list packages -3
package:ru.appspress.showcase
package:com.truecaller
package:com.mapswithme.maps.pro
...

包名包含某字符串的应用

比如要查看包名包含youtube 的应用列表:

1
2
$ adb shell pm list packages youtube
package:com.google.android.youtube

根据包名查找apk位置

比如要查询包名为com.google.android.youtube的应用对应那个apk文件:

1
2
$ adb shell pm list packages -f | grep com.google.android.youtube
package:/system/app/YouTube/YouTube.apk=com.google.android.youtube

还有一种方法:

1
2
$ adb shell pm path com.google.android.youtube
package:/system/app/YouTube/YouTube.apk

安装 APK

命令:

1
2
3
4
5
6
7
8
9
10
11
adb install [options] <path>

options:
-l:安装具有转发锁定功能的软件包。
-r:重新安装现有应用,保留其数据。
-t:允许安装测试 APK。
-i installer_package_name:指定安装程序软件包名称。
-s:在共享的大容量存储(如 sdcard)上安装软件包。
-f:在内部系统内存上安装软件包。
-d:允许版本代码降级。
-g:授予应用清单文件中列出的所有权限。

卸载应用

命令:

1
2
3
4
adb uninstall [options] <packagename>

options:
-k:移除软件包后保留数据和缓存目录。

比如要删除Facebook:

1
2
$ adb uninstall com.facebook.katana
Success

清除应用数据与缓存

1
adb shell pm clear <packagename>

查看前台 Activity

1
2
$ adb shell dumpsys activity activities | grep mFocusedActivity
mFocusedActivity: ActivityRecord{1c30ed0 u0 com.android.launcher3/com.android.searchlauncher.SearchLauncher t36}

其中的 com.android.launcher3/com.android.searchlauncher.SearchLauncher 就是当前处于前台的 Activity。
PS: 这个命令经常使用,建议添加一条alias到~/.bashrc中。

查看正在运行的 Services

1
adb shell dumpsys activity s[ervices] [<packagename>]

指定 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ adb shell dumpsys activity s com.google.android.gms

# gms包含services太多,只节选如下一个
ACTIVITY MANAGER SERVICES (dumpsys activity services)
User 0 active services:
* ServiceRecord{50488d1 u0 com.google.android.gms/.backup.BackupTransportService}
intent={act=android.backup.TRANSPORT_HOST cmp=com.google.android.gms/.backup.BackupTransportService}
packageName=com.google.android.gms
processName=com.google.android.gms.persistent
permission=android.permission.CONFIRM_FULL_BACKUP
baseDir=/system/priv-app/GmsCore/GmsCore.apk
dataDir=/data/user/0/com.google.android.gms
app=ProcessRecord{fb5d37 1760:com.google.android.gms.persistent/u0a11}
createTime=-4h52m39s538ms startingBgTimeout=--
lastActivity=-4h52m20s871ms restartTime=-4h52m20s871ms createdFromFg=true
Bindings:
* IntentBindRecord{f9a5ee0 CREATE}:
intent={act=android.backup.TRANSPORT_HOST cmp=com.google.android.gms/.backup.BackupTransportService}
binder=android.os.BinderProxy@ee2d599
requested=true received=true hasBound=true doRebind=false
* Client AppBindRecord{ffc05e ProcessRecord{5dcddd2 1058:system/1000}}
Per-process Connections:
ConnectionRecord{e3b7f99 u0 CR com.google.android.gms/.backup.BackupTransportService:@ba370e0}
All Connections:
ConnectionRecord{e3b7f99 u0 CR com.google.android.gms/.backup.BackupTransportService:@ba370e0}

Connection bindings to services:
* ConnectionRecord{e3b7f99 u0 CR com.google.android.gms/.backup.BackupTransportService:@ba370e0}
binding=AppBindRecord{ffc05e com.google.android.gms/.backup.BackupTransportService:system}
conn=android.app.LoadedApk$ServiceDispatcher$InnerConnection@ba370e0 flags=0x1

解读:

  • Service类名com.google.android.gms.backup.BackupTransportService;
  • 对应apk路径/system/priv-app/GmsCore/GmsCore.apk;
  • 运行所在进程1760:com.google.android.gms.persistent/u0a11,其中进程pid=1760,进程名为com.google.android.gms.persistent,uid=u0a11;
  • 通过bindService连接该服务的进程pid=1058,进程名为system

与应用交互

主要是使用 am 命令, am 即 Activity Manager,两种使用方式,一种是直接通过adb:

1
adb shell am command

还有一种是先进入手机shell:

1
2
$ adb shell
Phone:/ $ am command

intent 参数规范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
对于采用 intent 参数的 Activity Manager 命令,您可以使用以下选项指定 intent:

-a action
指定 intent 操作,如“android.intent.action.VIEW”。此指定只能声明一次。

-d data_uri
指定 intent 数据 URI,如“content://contacts/people/1”。此指定只能声明一次。

-t mime_type
指定 intent MIME 类型,如“image/png”。此指定只能声明一次。

-c category
指定 intent 类别,如“android.intent.category.APP_CONTACTS”。

-n component
指定带有软件包名称前缀的组件名称以创建显式 intent,如“com.example.app/.ExampleActivity”。

-f flags
将标志添加到 setFlags() 支持的 intent。

--esn extra_key
添加一个 null extra。URI intent 不支持此选项。

-e|--es extra_key extra_string_value
添加字符串数据作为键值对。

--ez extra_key extra_boolean_value
添加布尔型数据作为键值对。

--ei extra_key extra_int_value
添加整数型数据作为键值对。

--el extra_key extra_long_value
添加长整型数据作为键值对。

--ef extra_key extra_float_value
添加浮点型数据作为键值对。

--eu extra_key extra_uri_value
添加 URI 数据作为键值对。

--ecn extra_key extra_component_name_value
添加组件名称,将其作为 ComponentName 对象进行转换和传递。

--eia extra_key extra_int_value[,extra_int_value...]
添加整数数组。

--ela extra_key extra_long_value[,extra_long_value...]
添加长整型数组。

--efa extra_key extra_float_value[,extra_float_value...]
添加浮点型数组。

--grant-read-uri-permission
包含标志 FLAG_GRANT_READ_URI_PERMISSION。

--grant-write-uri-permission
包含标志 FLAG_GRANT_WRITE_URI_PERMISSION。

--debug-log-resolution
包含标志 FLAG_DEBUG_LOG_RESOLUTION。

--exclude-stopped-packages
包含标志 FLAG_EXCLUDE_STOPPED_PACKAGES。

--include-stopped-packages
包含标志 FLAG_INCLUDE_STOPPED_PACKAGES。

--activity-brought-to-front
包含标志 FLAG_ACTIVITY_BROUGHT_TO_FRONT。

--activity-clear-top
包含标志 FLAG_ACTIVITY_CLEAR_TOP。

--activity-clear-when-task-reset
包含标志 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。

--activity-exclude-from-recents
包含标志 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。

--activity-launched-from-history
包含标志 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。

--activity-multiple-task
包含标志 FLAG_ACTIVITY_MULTIPLE_TASK。

--activity-no-animation
包含标志 FLAG_ACTIVITY_NO_ANIMATION。

--activity-no-history
包含标志 FLAG_ACTIVITY_NO_HISTORY。

--activity-no-user-action
包含标志 FLAG_ACTIVITY_NO_USER_ACTION。

--activity-previous-is-top
包含标志 FLAG_ACTIVITY_PREVIOUS_IS_TOP。

--activity-reorder-to-front
包含标志 FLAG_ACTIVITY_REORDER_TO_FRONT。

--activity-reset-task-if-needed
包含标志 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。

--activity-single-top
包含标志 FLAG_ACTIVITY_SINGLE_TOP。

--activity-clear-task
包含标志 FLAG_ACTIVITY_CLEAR_TASK。

--activity-task-on-home
包含标志 FLAG_ACTIVITY_TASK_ON_HOME。

--receiver-registered-only
包含标志 FLAG_RECEIVER_REGISTERED_ONLY。

--receiver-replace-pending
包含标志 FLAG_RECEIVER_REPLACE_PENDING。

--selector
需要使用 -d 和 -t 选项以设置 intent 数据和类型。

启动 Activity

命令:

1
adb shell am start [options] <INTENT>

比如打开Music 界面:

1
2
$ adb shell am start -n com.android.music/.MusicBrowserActivity
Starting: Intent { cmp=com.android.music/.MusicBrowserActivity }

启动 Service

命令:

1
adb shell am startservice [options] <INTENT>

比如打开音乐播放服务:

1
2
$ adb shell am startservice -n com.android.music/.MediaPlaybackService
Starting service: Intent { cmp=com.android.music/.MediaPlaybackService }

发出广播

命令:

1
adb shell am broadcast [options] <INTENT>

比如发出打开网页”https://segon.cn/"的广播:

1
2
$ adb shell am start -a android.intent.action.VIEW -d https://segon.cn
Starting: Intent { act=android.intent.action.VIEW dat=https://segon.cn/... }

发出广播,指定接收应用

即INTENT 通过参数-n指定component。
比如指定Chrome打开网页”https://segon.cn":

1
2
$ adb shell am start -a android.intent.action.VIEW -d https://segon.cn -n com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity
Starting: Intent { act=android.intent.action.VIEW dat=https://segon.cn/... cmp=com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity }

PS: 一些只能system发送的action,需要root权限才能通过am broadcast发送,比如android.intent.action.BOOT_COMPLETED

强制停止应用

1
adb shell am force-stop <packagename>

使手机定屏

1
2
$ adb shell am hang
Hanging the system...

可以用ctrl+c中止。

实用功能

屏幕截图

1
adb shell screencap -p /sdcard/sc.png

截图并保存到PC 当前目录:

1
adb shell screencap -p /sdcard/sc.png && adb pull /sdcard/sc.png

我是把截图并保存封装了一个alias:

1
2
3
4
5
6
7
# Capture the screen and save image to current path
# param : image's name
# Useage : adbcap name
#
adbcap(){
adb shell screencap -p /sdcard/$1.png && adb pull /sdcard/$1.png
}

录制视频

命令:

1
2
3
4
5
6
7
8
9
adb shell screenrecord [options] <filename>

Options:
--help :显示命令语法和选项
--size widthxheight:设置视频大小:1280x720。默认值是设备的原生显示分辨率(如果支持),如果不支持,则使用 1280x720。
--bit-rate rate :设置视频的视频比特率(以兆比特每秒为单位)。默认值为 4Mbps。
--time-limit time :设置最大录制时长(以秒为单位)。默认值和最大值均为 180(3 分钟)。
--rotate :将输出旋转 90 度。此功能是实验性的。
--verbose :显示命令行屏幕上的日志信息。如果您不设置此选项,则运行时此实用程序不会显示任何信息。

示例:

1
$ adb shell screenrecord /sdcard/demo.mp4

重启手机

1
adb reboot

恢复出厂设置(root)

1
adb shell am broadcast -a android.intent.action.MASTER_CLEAR

打开MTKLogger 界面

1
adb shell am start -n com.mediatek.mtklogger/.MainActivity

查看手机分区

1
2
3
4
5
6
7
8
9
10
11
$ adb shell df -h

Filesystem Size Used Avail Use% Mounted on
tmpfs 451M 740K 450M 1% /dev
tmpfs 451M 0 451M 0% /mnt
/dev/block/platform/mtk-msdc.0/system 2.9G 2.9G 20M 100% /system
/dev/block/platform/mtk-msdc.0/cache 294M 224K 288M 1% /cache
tmpfs 451M 0 451M 0% /storage
/dev/block/dm-0 3.6G 3.2G 358M 91% /data
/dev/fuse 3.6G 3.2G 358M 91% /storage/emulated
/dev/fuse 7.3G 5.0M 7.3G 1% /storage/3231-3065

改变手机电量

1
adb shell dumpsys battery set level <int>

int 值按道理应该是填写0~100,但是你也可以填其它整数,负数都行。