一、连接与基础操作
1.1 连接设备
USB连接:
adb devices
执行结果:
List of devices attached
CB5123ABCDEFGHIJ device
进入设备Shell:
adb shell
# 或指定USB设备
adb -d shell
网络连接:
# 连接设备
adb connect 192.168.1.100:5555
# 断开连接
adb disconnect 192.168.1.100:5555
# 进入网络设备的Shell
adb -e shell
默认端口号是5555,需要设备与电脑在同一局域网
1.2 重启设备
adb reboot
二、文件操作
2.1 文件推送与拉取
推送到设备:
adb push D:/test/test.log /sdcard/
从设备拉取:
adb pull /sdcard/test.log D:/test
2.2 截图
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png F:\screenshot
三、应用管理
3.1 安装APK
adb install -r ./test.apk
3.2 卸载APK
adb uninstall com.sample.code
卸载系统内置应用(需root):
adb root
adb remount
adb shell rm -rf /vendor/app/xxx.apk
# 删除应用目录,重启生效
3.3 查看已安装应用
adb shell pm list packages
3.4 查看应用版本号
dumpsys package com.sample.code | grep version
执行结果示例:
versionCode=36 targetSdk=31
3.5 强制停止应用
adb shell am force-stop com.sample.code
3.6 启动应用
adb shell am start -n com.sample.code/.MainActivity
四、内存与CPU
4.1 查看应用内存详情
adb shell dumpsys meminfo com.example.myfirstapp
执行结果(关键字段):
Applications Memory Usage (in Kilobytes):
** MEMINFO in pid 23209 [com.example.myfirstapp] **
Pss Private Private Swap Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 8406 8284 0 0 20620 17082 3537
Dalvik Heap 988 900 0 0 2962 1426 1536
Dalvik Other 481 476 0 0
Stack 56 56 0 0
Ashmem 7 0 0 0
Other dev 12 0 12 0
.so mmap 2123 160 8 0
.jar mmap 1737 0 24 0
.apk mmap 1027 0 0 0
.ttf mmap 48 0 0 0
.dex mmap 1944 4 1936 0
.oat mmap 66 0 0 0
.art mmap 5883 5508 0 0
Other mmap 60 20 0 0
Unknown 725 688 0 0
TOTAL 23563 16096 1980 0 23582 18508 5073
App Summary
Pss(KB)
------
Java Heap: 6408
Native Heap: 8284
Code: 2132
Stack: 56
Graphics: 0
Private Other: 1196
System: 5487
Objects
Views: 17 ViewRootImpl: 1
AppContexts: 6 Activities: 1
PSS 是最精准的内存指标,表示应用占用的共享+私有内存
内存分类说明:
| Native Heap | ||
| Dalvik Heap | ||
| Dalvik Other | ||
| Stack | ||
| Ashmem | ||
| Other dev | ||
| .so mmap | ||
| .jar mmap | ||
| .apk mmap | ||
| .ttf mmap | ||
| .dex mmap | ||
| .oat mmap | ||
| .art mmap | ||
| Other mmap | ||
| Unknown |
App Summary说明:
| Java Heap | ||
| Native Heap | ||
| Code | ||
| Stack | ||
| Graphics | ||
| System |
Objects说明:
| Activities | ||
| Views | ||
| AppContexts |
4.2 获取进程的Binder连接
adb shell "cat /d/binderfs/procs/<PID>/transactions_log"
<PID>表示应用的进程号
4.3 抓取Heap文件
adb shell am dumpheap com.sample.code /data/local/tmp/sample-dumpheap4.hprof
adb pull /data/local/tmp/sample-dumpheap4.hprof
4.4 查看系统内存信息
adb shell cat /proc/meminfo
执行结果:
MemTotal: 7708608 kB
MemFree: 125148 kB
MemAvailable: 2150096 kB
Buffers: 2096 kB
Cached: 1959024 kB
SwapCached: 31456 kB
Active: 1425944 kB
Inactive: 1842408 kB
Active(anon): 781092 kB
Inactive(anon): 797336 kB
Active(file): 644852 kB
Inactive(file): 1045072 kB
CmaTotal: 372736 kB
CmaFree: 0 kB
CmaTotal/CmaFree 是连续物理内存,如果CmaFree不足会导致无法打开新界面或黑屏
4.5 查看CPU核心数
adb shell cat /proc/cpuinfo
执行结果(关键部分):
Processor : AArch64 Processor rev 0 (aarch64)
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
Hardware : Qualcomm Technologies, Inc SM8250_AC
4.6 实时查看进程CPU/内存
adb shell top
# 按内存排序
adb shell top -s 6
执行结果:
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
Mem: 1.9G total, 1.7G used, 175M free, 23M buffers
PID USER PR NI VIRT [RES] SHR S %CPU %MEM TIME+ ARGS
515 system 18 -2 7.7G 295M 199M S 4.6 14.7 29:48.69 system_server
8036 system 20 0 4.6G 166M 116M S 0.0 8.2 0:03.29 com.android.settings
935 u0_a102 20 0 4.8G 163M 110M S 0.0 8.1 0:21.57 com.android.launcher3
4.7 查看存储占用
adb shell df -h
执行结果:
Filesystem Size Used Avail Use% Mounted on
/dev/block/dm-15 650M 650M 0 100% /
tmpfs 3.6G 2.0M 3.6G 1% /dev
tmpfs 3.6G 24K 3.6G 1% /mnt
/dev/block/dm-16 1.0G 1.0G 0 100% /system_ext
/dev/block/dm-17 2.3M 2.3M 0 100% /product
/dev/block/dm-18 930M 930M 0 100% /vendor
/dev/block/dm-19 237M 237M 0 100% /odm
/dev/block/dm-4 511M 511M 0 100% /my_product
/dev/block/sda9 404M 40M 351M 11% /cache
/dev/block/dm-49 106G 103G 2.8G 98% /data
/dev/fuse 106G 103G 2.8G 98% /storage/emulated
/data/media 106G 103G 2.8G 98% /storage/emulated/0/Android/data
如果想查看某个目录下哪个文件或目录占用的存储最大,可使用命令
df -sh *来查看,先进入指定的目录(cd /sdcard),再执行该指令。
执行结果示例:
3.5K ARDebug
12K Alarms
18G Android
59M AnkiChina
201M BaiduNetdisk
2.7G DCIM
5.4M DingTalk
3.5M Documents
1.2G Download
649M Pictures
五、日志
5.1 抓取日志
全部日志:
logcat -b all -d > alllog.log
查看特定Tag:
logcat -s tag -v time
只看Error:
logcat *:E
5.2 过滤应用日志
adb logcat --pid=$(adb shell pidof -s com.sample.code)
5.3 导出故障报告
adb bugreport
adb pull data/system/dropbox
adb pull data/tombstones
adb pull data/anr
六、系统信息
6.1 dumpsys命令
dumpsys activity intents | |
dumpsys activity broadcasts | |
dumpsys activity providers | |
dumpsys activity services | |
dumpsys activity activities | |
dumpsys activity processes | |
dumpsys activity lru | |
dumpsys media_session | |
dumpsys -l | |
dumpsys gfxinfo <pid> | |
dumpsys window w |
查看Activity栈:
adb shell dumpsys activity activities
6.2 系统属性
查看系统属性:
adb shell getprop
修改系统属性(需root):
adb shell setprop <key> <value>
6.3 系统设置
查看系统设置:
adb shell settings list system
修改系统设置:
adb shell settings put system <key> <value>
6.4 查看分辨率/DPI
adb shell wm size
adb shell wm density
执行结果:
Physical size: 1920x1080
Physical density: 160
6.5 查看网卡地址
adb shell ifconfig wlan0
七、模拟操作
7.1 白天/黑夜模式切换
adb shell "su 0 cmd uimode night yes" # 黑夜
adb shell "su 0 cmd uimode night no" # 白天
adb shell "su 0 cmd uimode night auto" # 自动
7.2 模拟输入事件
adb shell input text 123 | ||
adb shell input keyevent 4 | ||
adb shell input tap 100 100 | ||
adb shell input swipe 10 20 30 40 | ||
adb shell input draganddrop 10 20 30 40 | ||
adb shell input press 200 300 | ||
adb shell input roll 100 100 |
完整KeyEvent对照表(按编号排序):
快速查找表(常用):
adb shell input keyevent 4 | ||
adb shell input keyevent 3 | ||
adb shell input keyevent 26 | ||
adb shell input keyevent 24 | ||
adb shell input keyevent 25 | ||
adb shell input keyevent 27 | ||
adb shell input keyevent 5 | ||
adb shell input keyevent 6 | ||
adb shell input keyevent 1 |
7.3 修改分辨率
adb shell wm size 1920x1080
7.4 同步系统时间
adb shell date -s "2025-01-09 17:00:00"
7.5 模拟发送广播
adb shell am broadcast -a com.example.MY_CUSTOM_ACTION --es key1 value1 --ei key2 123
常见系统广播:
# 启动完成
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
# 恢复出厂设置
adb shell am broadcast -a android.intent.action.FACTORY_RESET
八、网络抓包
8.1 TCPDump抓包
adb shell "tcpdump -i any -p -vv -s 0 -w /sdcard/capture.pcap"
抓包完成后,使用WireShark打开分析
九、性能分析
9.1 Perfetto trace
adb shell perfetto -b 2048mb -t 3600s -o /data/misc/perfetto-traces/$(date +%Y%m%d_%H%M%S).perfetto-trace sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory network cpu gpu android.memory android.gfx
9.2 Smaps分析
adb shell cat /proc/$PID/smaps
9.3 查看GFX信息
adb shell dumpsys gfxinfo <PID>
9.4 Monkey压力测试
adb shell monkey -p com.sample.code -v 10000
十、其他
10.1 APK签名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.jks unsigned.apk alias_name
10.2 查看应用签名
keytool -printcert -jarfile your_app.apk
10.3 验证签名
jarsigner -verify -verbose -certs ./app.apk
10.4 查看事件
adb shell getevent
夜雨聆风