3、ADB基础命令实战:adb shell、adb install/uninstall、adb push/pull、adb logcat基础用法

ADB(Android Debug Bridge)是车载系统调试中最核心的桥梁工具。本章聚焦四个最常用的命令族:adb shell(远程终端)、adb install/uninstall(应用管理)、adb push/pull(文件传输)和adb logcat(日志捕获)。掌握这些命令,是进行车载系统深度调试的第一步。

3.1 adb shell:进入车载系统终端

adb shell 是调试的“万能钥匙”,它让你在PC上直接执行车载Android系统的Linux命令或进入交互式Shell。车载系统通常运行定制化Android,通过 adb shell 可以查看系统属性、进程状态、文件系统结构等核心信息。

典型场景: 检查车载IVI(车载信息娱乐系统)的Android版本、内核信息、CPU架构,或直接修改系统配置文件。
# 执行单条命令,查看系统属性
adb shell getprop ro.build.version.release

# 进入交互式Shell
adb shell
generic_x86_arm:/ $ ls -l /system/app/
generic_x86_arm:/ $ ps -A | grep car
generic_x86_arm:/ $ exit
提示: 在车载调试中,adb shell 后常跟 su 提权(如果系统已root),以访问受保护分区。部分量产车机可能限制 su 命令,此时可尝试 adb root 重启adbd为root权限。
adb shell 工作流程 adb shell 工作流程 PC 调试主机 adb shell 命令 USB / TCP ADB Server 端口转发/协议解析 车载系统 adbd 守护进程 Shell 命令执行 ls / ps / getprop 结果返回 stdout / stderr adb shell 本质:PC端输入 → 车载端 adbd 解析 → 执行命令 → 回显结果

3.2 adb install / uninstall:车载应用生命周期管理

车载系统的应用安装与卸载与普通Android设备类似,但需注意签名验证和系统分区权限。调试阶段常使用 -r(覆盖安装)和 -d(降级安装)选项。

命令 选项 说明 车载调试场景
adb install -r 覆盖安装,保留数据 更新HMI(人机交互)应用,保留用户设置
adb install -d 允许降级安装(版本号更低) 回滚到稳定版车载应用
adb install -g 授予所有运行时权限 调试需要敏感权限的车载服务
adb uninstall -k 卸载但保留数据/缓存 临时移除应用,保留日志用于分析
adb uninstall (无选项) 完全卸载应用及数据 清理测试环境
# 安装车载HMI应用(覆盖安装)
adb install -r CarLauncher.apk

# 降级安装系统设置应用
adb install -d -r Settings_v1.0.apk

# 卸载系统预装应用(需root或system分区可写)
adb shell pm uninstall -k --user 0 com.example.car.service

# 卸载用户安装的应用
adb uninstall com.example.car.testapp
注意: 车载系统通常有 安全启动 和 签名校验 机制。使用 adb install 安装未签名的APK或签名不一致的APK会失败。调试阶段建议使用与系统相同的platform签名或使用 adb root + adb remount 将APK直接push到 /system/priv-app/ 目录。

3.3 adb push / pull:车载文件系统传输

文件传输是车载调试的日常操作。adb push 将文件从PC发送到车载设备,adb pull 从车载设备拉取文件到PC。车载系统中,/sdcard/ 通常映射到内部存储,/data/ 存放应用数据,/system/ 为系统分区。

核心用途: 替换系统配置文件(如 build.prop)、提取崩溃日志(tombstones)、上传调试工具(如 perfetto 二进制文件)。
# 将PC上的配置文件推送到车载系统
adb push ./car_audio_config.xml /vendor/etc/

# 从车载系统拉取日志文件到PC
adb pull /data/anr/traces.txt ./logs/

# 递归拉取整个目录
adb pull /data/log/ ./car_logs/

# 推送可执行文件并赋予执行权限
adb push ./debug_tool /data/local/tmp/
adb shell chmod 755 /data/local/tmp/debug_tool
车载目录 权限 典型内容 调试操作
/sdcard/ 读写 用户数据、媒体文件 push/pull 测试文件
/data/data/ 需root 应用私有数据、数据库 pull 数据库分析
/system/ 只读(需remount) 系统应用、框架JAR push 替换系统组件
/vendor/ 只读(需remount) 硬件抽象层(HAL)配置 push 更新传感器校准文件

3.4 adb logcat:车载系统日志捕获基础

adb logcat 是车载系统调试的“眼睛”。它实时输出系统日志,支持按优先级、标签、进程ID过滤。车载系统中,CAN总线日志、GPS状态、音频焦点变化等关键信息都通过logcat输出。

logcat 日志流处理架构 logcat 日志流处理架构 应用日志 Log.d / Log.e 系统日志 kernel / events 车载HAL日志 CAN / GPS / Audio logd 日志缓冲区 main / system / crash adb logcat 过滤 / 格式化 -s / -v / --pid PC终端输出 车载日志流:应用/系统/HAL → logd 统一缓冲 → adb logcat 过滤输出到PC
# 输出所有日志(默认级别 >= V)
adb logcat

# 按优先级过滤:只显示 Warning 及以上级别
adb logcat *:W

# 按标签过滤:只显示 CarAudioService 的日志
adb logcat -s CarAudioService

# 同时过滤标签和优先级
adb logcat CarAudioService:D CarService:E *:S

# 输出带时间戳的日志
adb logcat -v time

# 清空旧日志缓冲区
adb logcat -c

# 将日志保存到PC文件
adb logcat -v time -d > car_log_2025.txt
车载调试技巧: 使用 adb logcat -b all 查看所有缓冲区(main、system、crash、events)。对于车载系统,events 缓冲区常包含窗口焦点变化、按键事件等关键信息。结合 grep 可快速定位问题:adb logcat | grep -i "error\|exception\|car"。

3.5 命令组合实战:车载系统启动异常排查

以下是一个完整的车载系统启动异常排查流程,综合运用本章四个命令族:

  1. 检查设备连接: adb devices -l 确认车载设备已识别。
  2. 进入Shell查看系统状态: adb shell getprop | grep ro.build 查看固件版本;adb shell dumpsys activity activities 查看当前Activity栈。
  3. 捕获启动日志: adb logcat -b all -v time > boot_log.txt 记录完整启动过程。
  4. 提取崩溃信息: adb pull /data/tombstones/ ./tombstones/ 拉取native崩溃文件。
  5. 替换调试APK: adb install -r -d CarLauncher_debug.apk 覆盖安装调试版本。
  6. 验证文件传输: adb push ./config.xml /vendor/etc/ && adb shell chmod 644 /vendor/etc/config.xml 更新配置文件。
避坑指南:
  • adb install 失败时,先检查 adb shell pm list packages 确认包名是否冲突。
  • adb push 到 /system/ 或 /vendor/ 前,务必执行 adb remount 重新挂载为读写分区。
  • 长时间运行 adb logcat 可能导致日志缓冲区溢出,建议使用 logcat -r 1024 -n 5 进行轮转输出。
  • 车载系统可能禁用 adb root,此时可尝试 adb shell setprop service.adb.root 1 后重启adbd。