做 Android 开发这些年,adb 大概是我敲得最多的三个字母(没有之一,git 表示不服)。命令大全网上一搜一大把,但真到用的时候还是想不起来参数怎么拼——所以这篇只收录我日常真正高频使用的命令,按场景分类,忘了就回来抄。想要百科全书版的,推荐 mzlogin/awesome-adb,本文的整理也参考了该项目。
一、设备连接
USB 连接:设备开启「开发者选项 → USB 调试」,连线后确认:
WiFi 连接(初次需借助 USB 线):
1 2 3
| adb tcpip 5555 adb connect <device-ip> adb disconnect <device-ip>
|
多设备并存时用 -s 指定目标设备:
1
| adb -s emulator-5554 shell
|
二、应用管理
1 2 3 4 5 6 7 8
| adb install -r demo.apk adb uninstall <package> adb shell pm clear <package> adb shell am force-stop <package> adb shell pm list packages -3 adb shell pm list packages <keyword> adb shell pm path <package> adb shell dumpsys package <package>
|
安装失败时控制台会甩给你一串大写的错误码,看着吓人,其实翻译过来大多是「你装过了」「签名不对」「先卸载」这三句话的排列组合。常见的几个:
| 错误码 |
原因 |
解决 |
| INSTALL_FAILED_ALREADY_EXISTS |
应用已存在 |
加 -r 或先卸载 |
| INSTALL_FAILED_UPDATE_INCOMPATIBLE |
已装同名应用但签名不一致 |
先卸载再装 |
| INSTALL_FAILED_VERSION_DOWNGRADE |
已安装更高版本 |
加 -d |
| INSTALL_FAILED_TEST_ONLY |
Android Studio 直接 Run 出来的包 |
用 assembleDebug 重新打包,或加 -t |
| INSTALL_FAILED_INSUFFICIENT_STORAGE |
存储空间不足 |
清理空间 |
三、实战:从手机提取已安装应用的 APK
「这个 App 的效果怎么实现的?」——想反编译研究一下,第一步得先把 APK 弄下来。这是我用得最多的组合技之一:
1 2 3
| adb shell pm list packages | grep <关键字> adb shell pm path com.tencent.mobileqq adb pull /data/app/<path>/base.apk ~/Desktop/
|
四、日志
1 2 3 4 5 6 7 8 9
| adb logcat adb logcat -s TagName adb logcat '*:W' adb logcat ActivityManager:I MyApp:D '*:S' adb logcat -v time adb logcat -c adb logcat > log.txt adb wait-for-device logcat -b all -v time > log.txt adb shell dmesg
|
五、模拟按键与输入
adb shell input 在自动化和调试时非常好用:
1 2 3 4 5 6 7 8
| adb shell input keyevent 3 adb shell input keyevent 4 adb shell input keyevent 26 adb shell input keyevent 82 adb shell input keyevent 24 adb shell input text hello_world adb shell input tap 500 800 adb shell input swipe 300 1000 300 500
|
完整 keycode 列表见 KeyEvent 文档。
六、截图与录屏
1 2 3 4
| adb exec-out screencap -p > sc.png adb shell screenrecord /sdcard/demo.mp4 adb shell screenrecord --size 1280x720 --bit-rate 6000000 --time-limit 30 /sdcard/demo.mp4 adb pull /sdcard/demo.mp4
|
七、设备信息
1 2 3 4 5 6 7 8 9 10 11
| adb shell getprop ro.build.version.release adb shell getprop ro.build.version.sdk adb shell getprop ro.product.model adb shell getprop ro.product.brand adb shell wm size adb shell wm density adb shell dumpsys battery adb shell settings get secure android_id adb shell cat /proc/cpuinfo adb shell cat /proc/meminfo adb shell ifconfig wlan0
|
八、文件传输
1 2
| adb push <本地路径> <设备路径> adb pull <设备路径> [本地路径]
|
九、与应用交互(am 命令)
1 2 3 4 5
| adb shell am start -a android.settings.SETTINGS adb shell am start -a android.intent.action.DIAL -d tel:10086 adb shell am start -n <package>/<activity> adb shell am start -W -n <package>/<activity> adb shell am broadcast -a <action>
|
十、修改设备设置(调试适配利器)
1 2 3 4
| adb shell wm size 480x1024 adb shell wm size reset adb shell wm density 160 adb shell wm density reset
|
十一、其他
1 2 3 4 5
| adb reboot adb reboot recovery adb reboot bootloader adb shell monkey -p <package> -v 500 adb kill-server && adb start-server
|
参考:mzlogin/awesome-adb——最全面的 adb 命令中文文档,本文按个人使用频率做了精选和场景化整理。