adb常用命令调试

最近在开发工位机的app,然后发现没有type-c数据线连接调试的,其实可以通过adb connect远程连接调试,又遇到同事的三星手机升级到最新系统之后,把原来的企业微信卸载,发现安装不上了,就接触了一下adb的命令

ADB(Android Debug Bridge) 是 Android 开发中必不可少的强大工具,尤其在设备调试、自动化测试和系统级操作方面。你遇到的场景(远程调试和设备安装问题)非常典型。下面详细介绍常用 ADB 命令及其应用场景:

一、核心准备:连接设备

  1. ​开启设备的 USB 调试模式:​​ 这是使用大多数 ADB 命令的前提。

    • 进入 设置 > 关于手机 > 连续点击 版本号 7次(激活开发者选项)。

    • 返回 设置 > 系统和更新 > 开发者选项 > 开启 USB调试

    • ​(重要) 对于无线调试 (Android 11+):​

      • 开发者选项 中,找到 无线调试 并开启。
      • 选择 使用配对码配对设备
      • 记下设备显示的 6位配对码、IP地址和端口号(如 192.168.x.x:12345)。
      • 在电脑命令行执行:adb pair <设备IP>:<配对端口号>,然后输入配对码。配对成功后,设备会出现在 无线调试 的"已配对设备"列表中。
      • 执行 adb connect <设备IP>:<无线调试端口号>(配对端口号和连接端口号不同,注意看设备提示的连接端口号或已配对设备列表里显示的端口号)。
    • ​(传统方式) USB 有线连接:​ ​ 使用 USB 数据线连接手机和电脑。首次连接时,手机屏幕上会出现"允许 USB 调试吗?"的弹窗,勾选 始终允许 并点击 确定

  2. ​验证设备连接:​

    • adb devices -l

      • ​作用:​ 列出所有已连接的设备(包括 USB 和网络)。-l 参数显示设备的详细信息(产品型号、传输协议等)。
      • ​输出示例:​ List of devices attached 2f4c3b8d device product:starqlteue model:SM_G960U device:starqlte transport_id:1
      • ​应用:​ 确认设备是否被电脑正确识别,获取设备的序列号 (2f4c3b8d 或后续命令中的 <device-id>)。

二、常用 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>:仅显示指定 TagLevel 以上的日志 (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)。
    • ​场景:​ 分析与硬件、驱动相关的低级故障(如驱动崩溃、初始化失败)。

三、解决同事三星手机安装企业微信问题的思路

  1. ​确认包名:​

    • adb shell pm list packages | grep weixin (Linux/macOS)
    • adb shell pm list packages | findstr weixin (Windows)
    • 查看是否有残留的同名或相关包(企业微信包名一般是 com.tencent.wework)。
  2. ​强力清除:​

    • 如果发现有残留包名: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允许降级)
  3. ​检查签名冲突源头:​

    • 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 开发顺利!

相关推荐
程序员JerrySUN11 分钟前
RK3588 Android SDK 实战全解析 —— 架构、原理与开发关键点
android·架构
移动开发者1号24 分钟前
Java Phaser:分阶段任务控制的终极武器
android·kotlin
哲科软件9 小时前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
jyan_敬言15 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
程序员老刘16 小时前
Android 16开发者全解读
android·flutter·客户端
福柯柯17 小时前
Android ContentProvider的使用
android·contenprovider
不想迷路的小男孩17 小时前
Android Studio 中Palette跟Component Tree面板消失怎么恢复正常
android·ide·android studio
餐桌上的王子17 小时前
Android 构建可管理生命周期的应用(一)
android
菠萝加点糖17 小时前
Android Camera2 + OpenGL离屏渲染示例
android·opengl·camera
用户20187928316717 小时前
🌟 童话:四大Context徽章诞生记
android