现在很多设备都是Android系统开发的,包括游戏机,智能售货机,垃圾回收机,安卓手机,机顶盒,车载电脑等等。
需要操作设备里面的东西,就需要用到adb命令,下面是常用的adb命令。
技术实现原理
adb 是一个三层结构
adb(Android Debug Bridge)名字里的 bridge 就是它的架构:PC 端命令行客户端 ↔ 本机 adb 服务器 ↔ 设备端 adbd 守护进程。
- 你敲的每条 adb 命令都是客户端,它把请求交给本机常驻的 adb 服务器(默认监听 5037 端口),由服务器统一管理所有已连接设备;
- 设备端的 adbd 负责真正执行,再把结果传回来。
这个结构解释了两件常遇到的事:一是服务器会常驻,设备状态错乱(显示 offline/unauthorized)时 adb kill-server 再重连是第一招,重启的就是中间那层;二是同一台 PC 可以同时挂多台设备,多设备时命令要加 -s 序列号 指定目标,否则会报 more than one device。
为什么能通过网络 connect
adb 到设备有两条路:USB,以及 TCP。adb connect ip:5555 走的是后者——设备端 adbd 在 5555 端口监听。手机默认只开 USB 调试不监听网络(要先 USB 连着执行 adb tcpip 5555 打开),而机顶盒、车机、售货机这类没有 USB 调试口的设备,固件通常默认开放了网络 adbd,所以插上网线/连上 Wi-Fi 就能直接 connect,这也是搞这些设备的人最常用的一条命令。
命令里的 am / pm / aapt 是谁
am(Activity Manager):管理四大组件,am start 就是让系统按 Intent 启动一个 Activity;-W 表示等到启动完成并打印耗时;
pm(Package Manager):包管理,pm list packages 列出已装应用;
aapt:PC 端的 APK 解析工具,直接读 APK 里编译后的 AndroidManifest(二进制 XML),所以不用装到设备上就能查包名和入口 Activity——写自动化脚本、做逆向分析都靠它先摸清"包名/入口"这两个值。
另外注意过滤命令跑在哪端:adb shell pm list package | grep xxx 的 grep 在设备端(toybox 提供)可用;而 aapt 在 PC 上跑,Windows 下过滤要换 findstr。
通过ip连接设备
例如:
1
|
adb connect 192.168.1.61:5555
|
安装应用
加上-r参数覆盖安装
卸载APP
1
|
adb uninstall -k <apk名称>
|
查看包名
1
|
pm list package | grep "包名称"
|
grep——过滤某个包名
查询APP的包名
1
|
aapt dump badging 包名(apk)| findstr package
|
例如
aapt dump badging com.zhaopin.social_8006.apk |findstr package
查询APP的Activity的值
1
|
aapt dump badging 包名(apk)| findstr activity
|
例如
1
|
aapt dump badging com.zhaopin.social_8006.apk |findstr activity
|
启动app
1
|
adb shell am start -W -n 包名/启动的Activity
|
例如
adb shell am start -W -n com.zhaopin.social/com.zhaopin.social.SplashActivity
上传文件
adb push <local> <remote>
下载文件
1
|
adb pull <remote> <local>
|
屏幕截图
1
|
adb shell screencap /sdcard/***.png
|
adb服务启动
adb服务关闭
进入命令行
踩坑记录与注意事项
- connect 不上:先 ping 通、确认 5555 端口(
telnet ip 5555 试一下);手机类设备默认不监听网络 adbd,要 USB 执行 adb tcpip 5555 后再拔线;部分量产固件干脆去掉了网络 adbd;
- 设备显示 offline/unauthorized:
adb kill-server 后重连;首次连接要在设备屏幕上点允许调试的授权弹窗,机顶盒/车机没屏幕或没弹窗时最麻烦,接 USB 或重新烧授权文件;
- 多设备必须 -s 指定:
adb devices 先看序列号,adb -s 192.168.1.61:5555 shell 这样用;
- install 报 INSTALL_FAILED_UPDATE_INCOMPATIBLE:设备上已有签名不同的同包名应用(常见于调试版换正式版),先
adb uninstall 包名 再装,-r 覆盖装解决不了签名冲突;
- aapt 是 PC 端工具:别在
adb shell 里敲 aapt;同理 Windows 下 PC 端管道过滤用 findstr 不是 grep;
- push 到系统分区失败:/system、/vendor 挂载为只读,要 push 就先 remount(需要固件允许)或推到 /data/local/tmp;
- screencap 生成的文件在设备上:
adb shell screencap /sdcard/x.png 只是截图存到设备,还要 adb pull 拉回 PC,两步别少一步。