最近在开发工位机的app,然后发现没有type-c数据线连接调试的,其实可以通过adb connect远程连接调试,又遇到同事的三星手机升级到最新系统之后,把原来的企业微信卸载,发现安装不上了,就接触了一下adb的命令
ADB(Android Debug Bridge) 是 Android 开发中必不可少的强大工具,尤其在设备调试、自动化测试和系统级操作方面。你遇到的场景(远程调试和设备安装问题)非常典型。下面详细介绍常用 ADB 命令及其应用场景:
一、核心准备:连接设备
-
开启设备的 USB 调试模式: 这是使用大多数 ADB 命令的前提。
-
进入
设置
>关于手机
> 连续点击版本号
7次(激活开发者选项)。 -
返回
设置
>系统和更新
>开发者选项
> 开启USB调试
。 -
(重要) 对于无线调试 (Android 11+):
- 在
开发者选项
中,找到无线调试
并开启。 - 选择
使用配对码配对设备
。 - 记下设备显示的 6位配对码、IP地址和端口号(如
192.168.x.x:12345
)。 - 在电脑命令行执行:
adb pair <设备IP>:<配对端口号>
,然后输入配对码。配对成功后,设备会出现在无线调试
的"已配对设备"列表中。 - 执行
adb connect <设备IP>:<无线调试端口号>
(配对端口号和连接端口号不同,注意看设备提示的连接端口号或已配对设备列表里显示的端口号)。
- 在
-
(传统方式) USB 有线连接: 使用 USB 数据线连接手机和电脑。首次连接时,手机屏幕上会出现"允许 USB 调试吗?"的弹窗,勾选
始终允许
并点击确定
。
-
-
验证设备连接:
-
adb devices -l
- 作用: 列出所有已连接的设备(包括 USB 和网络)。
-l
参数显示设备的详细信息(产品型号、传输协议等)。 - 输出示例:
List of devices attached
2f4c3b8d device product:starqlteue model:SM_G960U device:starqlte transport_id:1
- 应用: 确认设备是否被电脑正确识别,获取设备的序列号 (
2f4c3b8d
或后续命令中的<device-id>
)。
- 作用: 列出所有已连接的设备(包括 USB 和网络)。
-
二、常用 ADB 命令详解与应用场景
1. 应用管理 (安装、卸载、运行)
-
adb install [-r] [-d] [-t] [-g] <path_to_apk>
-
作用: 将指定的 APK 文件安装到设备。
-
重要选项:
-r
:替换已存在的应用(覆盖安装)。这是解决你同事三星手机安装企业微信问题的关键! 卸载后重装报错(如签名冲突、旧数据残留),用它往往能成功。-d
:允许降级安装(版本号比已安装的低)。有时测试需要。-t
:允许安装测试包(android:testOnly="true"
)。通常用于调试未发布的内部版本。-g
:安装时授予 APK 中声明的所有运行时权限(Android 6.0+)。
-
场景: 部署新版本、修复安装问题(如你同事遇到的)、测试包安装。
-
-
adb install-multiple [-p] [-r] ... <path_to_base.apk> <path_to_split.apk> ...
- 作用: 安装 Split APK(App Bundle 安装后格式)。需要指定基础 APK 和一个或多个拆分 APK。
- 选项: 类似
adb install
。 - 场景: 安装从 Google Play 下载的 App Bundle 包用于本地测试。
-
adb uninstall [-k] <package_name>
-
作用: 卸载指定包名的应用。
-
选项:
-k
:仅卸载应用,但保留其数据和缓存目录。
-
场景: 干净卸载应用,或仅卸载应用本身保留用户数据。
-
-
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user <USER_ID>] [<filter>]
-
作用: 列出设备上安装的应用包名。
-
常用选项:
-f
:显示关联的 APK 文件路径。-d
:只列出被禁用的包。-e
:只列出启用的包。-s
:只列出系统应用。-3
:只列出第三方应用。-i
:显示包的安装来源。<filter>
:过滤包名 (e.g.,adb shell pm list packages weixin
找包含 "weixin" 的包)。
-
场景: 查找某个应用的完整包名(用于安装/卸载/启动)、查看系统应用列表。
-
-
adb shell am start [-n] [-a] [-d] [-t] <intent>
-
作用: 启动一个 Activity。
-
常用选项组合:
-n <component>
:指定要启动的组件 (e.g.,adb shell am start -n com.tencent.wework/.launch.LaunchSplashActivity
).-a <action>
-d 
-t <mime_type>
: 指定隐式 Intent 的操作、数据和 MIME 类型。
-
场景: 自动化测试起点、快速打开特定应用或应用内的特定页面。
-
-
adb shell am force-stop <package_name>
- 作用: 强制停止指定包名的应用及其所有后台服务。
- 场景: 当应用无响应或需要完全重启应用时(比手动杀进程更彻底)。
2. 文件传输
-
adb push <local> <remote>
- 作用: 将电脑上的文件或目录复制到设备。
- 场景: 推送配置文件、脚本、测试资源等到设备。
-
adb pull [<remote>] [<local>]
- 作用: 将设备上的文件或目录复制到电脑。
- 场景: 导出应用数据库、崩溃日志、屏幕截图进行分析。如果省略
<local>
,文件会保存在当前目录。
-
adb shell
+cp
/mv
/rm
/ls
/mkdir
/cat
/chmod
等- 作用: 进入设备的 Shell(类似 Linux 终端),直接操作设备文件系统。
- 场景: 高级文件管理、修改权限、查看文件内容、需要复杂文件操作的场景。(注意:操作
system
分区需要 Root)
3. 设备信息查询与控制
-
adb shell getprop
- 作用: 打印设备的大量系统属性。
- 场景: 查看设备型号 (
ro.product.model
)、Android 版本 (ro.build.version.release
)、安全补丁级别 (ro.build.version.security_patch
)、IMEI(部分机型,需权限)等。
-
adb shell dumpsys <service_name>
-
作用: 打印指定系统服务的详细信息。
service_name
可以是window
/activity
/package
/battery
/meminfo
/cpuinfo
/gfxinfo
等等。 -
场景:
adb shell dumpsys window windows | grep -E 'mCurrentFocus'
:查看当前最顶层 Activity。adb shell dumpsys meminfo <package_name>
:查看应用内存占用。adb shell dumpsys battery
:查看电池状态。adb shell dumpsys package <package_name>
:查看应用包安装详情、权限、路径等(非常详细)。
-
-
adb logcat [-s] [-v time] [-b <buffer>] [<filter>]
-
作用: 查看设备日志。Android 开发和调试的核心工具。
-
常用选项:
-s <tag>:<level>
:仅显示指定Tag
和Level
以上的日志 (e.g.,adb logcat -s MyAppTag:V Wechat:E *:S
).-v time
:在日志中显示可读的时间戳(强烈推荐)。-b <buffer>
:指定日志缓冲区,如main
(默认),system
,events
,crash
(崩溃日志)。> log.txt
:重定向输出到文件。
-
场景: 应用崩溃分析、跟踪代码执行流程、查看系统事件。
<filter>
语法强大,可精确筛选日志。
-
-
adb reboot [bootloader|recovery|sideload]
-
作用: 重启设备。
-
选项:
bootloader
:重启到 Bootloader/Fastboot 模式(用于刷机、解锁等)。recovery
:重启到 Recovery 模式(用于清除缓存、刷OTA包等)。sideload
:重启到 Recovery 并进入Apply update from ADB
模式。
-
场景: 刷机、进入特殊模式、简单的重启操作。
-
-
adb root
/adb disable-verity
/adb remount
-
作用: 这些是用于操作
/system
分区的命令,通常需要解锁 Bootloader 并对 Boot.img 打补丁(Magisk)等操作后才能使用。普通调试较少用,风险高。adb root
:以 Root 身份重启 ADB 守护进程。设备需已 Root。adb disable-verity
:禁用 verity 校验(dm-verity),使后续remount
可能成功(也可能破坏系统导致无法启动!慎用)。adb remount
:将设备分区(通常是/system
)重新挂载为可读可写。设备需已 Root 或已解锁/禁用验证。
-
场景: 替换系统文件、修改只读分区(高级系统修改,有风险!)。
-
4. 屏幕与输入模拟
-
adb shell screencap -p /sdcard/screen.png
- 作用: 截取设备屏幕,保存到
/sdcard/screen.png
。 - 场景: 快速截屏。需配合
adb pull
拿到本地。
- 作用: 截取设备屏幕,保存到
-
adb shell screenrecord [options] /sdcard/record.mp4
-
作用: 录制设备屏幕(Android 4.4+)。默认录制3分钟。
-
常用选项:
--size WxH
:指定分辨率。--bit-rate RATE
:指定比特率(影响文件大小和画质)。--time-limit SECONDS
:指定最长录制时间(秒)。
-
场景: 制作操作演示、录制 bug 复现过程。
-
-
adb shell input keyevent <keycode>
-
作用: 模拟按键事件。
-
常用键码 (Keycodes):
3
: Home键4
: 返回键5
: 通话键(拨号盘)6
: 挂断键24
: 音量+25
: 音量-26
: 电源键(锁屏/亮屏)66
: 回车键82
: 菜单键(现代应用较少用)KEYCODE_WAKEUP
(224):仅唤醒屏幕(配合解锁命令)。
-
场景: 自动化按键操作、解锁屏幕流程的一部分。
-
-
adb shell input tap <x> <y>
- 作用: 在屏幕坐标 (x, y) 处模拟点击。
- 场景: 简单的界面自动化。
-
adb shell input text "<string>"
- 作用: 向当前焦点输入框输入文本(注意:不支持中文,部分字符需转义)。
- 场景: 自动化输入用户名、密码等。
5. 端口转发与网络连接
-
adb forward tcp:<local_port> tcp:<device_port>
- 作用: 将电脑的本地 TCP 端口映射到设备上的 TCP 端口。
- 场景: 调试设备上的网络服务(如 WebServer)、使用 Chrome DevTools 调试 WebView。
-
adb reverse tcp:<device_port> tcp:<local_port>
- 作用: 将设备上的 TCP 端口映射到电脑的本地 TCP 端口(Android 5.0+)。
- 场景: 开发时让设备访问本地运行的服务器(如
localhost:8080
),常用于前端开发真机调试。
-
网络连接 (前面提到,复习一下):
adb connect <ip_address>:<port>
:连接开启无线调试的设备。adb disconnect [<ip_address>:<port>]
:断开指定网络设备连接,或断开所有网络设备连接。
6. 调试增强
-
adb bugreport
- 作用: 生成一个非常详细的设备状态、系统日志、错误报告的压缩包(zip)。需较长时间。
- 场景: 提交给官方分析复杂 Bug(如系统崩溃、死机)。包含比
logcat
多得多的信息。
-
adb shell dmesg
- 作用: 打印内核日志消息(Kernel Log)。
- 场景: 分析与硬件、驱动相关的低级故障(如驱动崩溃、初始化失败)。
三、解决同事三星手机安装企业微信问题的思路
-
确认包名:
adb shell pm list packages | grep weixin
(Linux/macOS)adb shell pm list packages | findstr weixin
(Windows)- 查看是否有残留的同名或相关包(企业微信包名一般是
com.tencent.wework
)。
-
强力清除:
-
如果发现有残留包名:
adb uninstall com.tencent.wework
(尝试标准卸载)。 -
如果标准卸载失败或卸载后仍安装失败(提示签名冲突等):
- (需要 root)
adb shell
su
cd /data/data
rm -rf com.tencent.wework
(删除应用私有数据目录,极度危险!操作前请备份!可能破坏系统稳定性)
cd /data/app
rm -rf */base.apk
(找到带有com.tencent.wework
字样的目录或文件名,删除对应的 APK 或整个目录)
exit
exit
- (无 root)
adb shell pm uninstall -k --user 0 com.tencent.wework
(尝试为特定用户卸载,-k
保留数据)
adb shell pm clear com.tencent.wework
(清除应用数据和缓存)
然后强制覆盖安装:adb install -r -t -d your_wework.apk
(-r
覆盖,-t
允许测试包,-d
允许降级)
- (需要 root)
-
-
检查签名冲突源头:
adb shell dumpsys package com.tencent.wework | grep "signatures"
(查看安装后包的签名信息)- 用
apksigner
(Android SDK Build Tools) 检查你本地 APK 的签名:apksigner verify -v --print-certs your_wework.apk
- 如果签名完全不同,说明之前安装的可能是修改版或来自不同渠道。
四、实用技巧与注意事项
- 多设备操作: 如果连接了多个设备(序列号不同),在执行任何设备相关的命令时,需要在命令后加上
-s <device-id>
指定目标设备(adb -s 2f4c3b8d install app.apk
)。 - 用户ID: Android 支持多用户。使用
adb shell pm list users
查看用户列表。在安装/卸载等命令后加上--user <user_id>
来指定用户(0
通常是主用户)。 - 日志筛选:
logcat
的 Tag 和 Level 过滤非常强大。学习使用*:W
仅显示警告及以上级别,MyTag:D
显示 MyTag 的调试级别等组合。 - Wireless Debugging (Android 11+): 强烈推荐使用。省去线缆烦恼。配对后即使重启设备通常也能自动重连(配对信息保留)。确保电脑和设备在同一局域网。
- 安全警告: ADB 功能强大,尤其
root
/remount
/文件系统删除操作可能导致设备变砖或数据丢失。操作前务必备份重要数据,并充分理解命令含义。 - 更新 ADB: 保持 Android SDK Platform-Tools 最新,以获得对新设备和新特性的支持。
- Windows 换行符: Windows 上
adb shell
里使用cat
查看文件时,文件结尾的^M
(Carriage Return) 是正常的(Unix/Linux 只有^J
Line Feed)。大部分现代文本编辑器可以处理。
总结: 掌握 ADB 是 Android 开发调试的基石。从简单的安装、日志查看,到复杂的自动化、设备控制和系统分析,ADB 都提供了强大的命令行接口。遇到安装问题优先尝试 adb install -r -t -d
。多练习,结合 adb shell
进入设备终端探索,会极大提升你的调试效率。祝你工位机 App 开发顺利!