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

相关推荐
安卓理事人5 小时前
安卓LinkedBlockingQueue消息队列
android
万能的小裴同学6 小时前
Android M3U8视频播放器
android·音视频
q***57747 小时前
MySql的慢查询(慢日志)
android·mysql·adb
JavaNoober7 小时前
Android 前台服务 "Bad Notification" 崩溃机制分析文档
android
城东米粉儿8 小时前
关于ObjectAnimator
android
zhangphil9 小时前
Android渲染线程Render Thread的RenderNode与DisplayList,引用Bitmap及Open GL纹理上传GPU
android
火柴就是我10 小时前
从头写一个自己的app
android·前端·flutter
lichong95111 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
用户693717500138411 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin
火柴就是我11 小时前
NekoBoxForAndroid 编译libcore.aar
android