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权限。
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输出。
# 输出所有日志(默认级别 >= 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 命令组合实战:车载系统启动异常排查
以下是一个完整的车载系统启动异常排查流程,综合运用本章四个命令族:
- 检查设备连接:
adb devices -l确认车载设备已识别。 - 进入Shell查看系统状态:
adb shell getprop | grep ro.build查看固件版本;adb shell dumpsys activity activities查看当前Activity栈。 - 捕获启动日志:
adb logcat -b all -v time > boot_log.txt记录完整启动过程。 - 提取崩溃信息:
adb pull /data/tombstones/ ./tombstones/拉取native崩溃文件。 - 替换调试APK:
adb install -r -d CarLauncher_debug.apk覆盖安装调试版本。 - 验证文件传输:
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。