第13章 车载测试与调试:模拟器使用、真机调试、日志分析、性能测试工具

做车载开发,最头疼的是什么?

不是写代码,是调试。

你想想看,车机不像手机,不能随便刷机。出问题了,你没法跟用户说「重启一下就好」。所以,测试和调试能力,直接决定了你的开发效率。这一章,我把这几年在车载项目里摸爬滚打的经验,全盘托出。

13.1 模拟器:你的第一道防线

我刚开始做车载开发时,总觉得模拟器没用。直到有一次,我在真机上反复测试一个导航卡顿问题,每次都要上车、点火、等系统启动……一天下来,光上下车就折腾了十几趟。后来我学乖了,先在模拟器上跑通,再上真机。

Android Automotive 模拟器,说白了就是一个虚拟的车机。它模拟了车载特有的硬件环境,比如:

  • 车载屏幕(不同尺寸、分辨率)
  • GPS 信号模拟
  • 车辆网络(CAN 总线模拟)
  • 音频通道(媒体、导航、通话分离)
我的习惯:每次新建项目,先创建三个模拟器配置——低配车机(2GB RAM)、中配(4GB)、高配(8GB)。这样能快速发现性能瓶颈。

13.1.1 创建车载模拟器

在 Android Studio 里,操作很简单:

1. 打开 AVD Manager
2. 点击「Create Virtual Device」
3. 选择「Automotive」分类
4. 选一个合适的设备定义(比如 Automotive Wide 或 Automotive Portrait)
5. 选择系统镜像(推荐 API 30 以上)
6. 配置完成后启动

嗯,这里要注意:系统镜像一定要选带有「Google APIs」的版本。否则很多车载特有的 API 会报错。我踩过这个坑,浪费了半天时间。

13.1.2 模拟器的高级玩法

模拟器不只是跑个界面。你可以用它模拟各种车载场景:

场景 模拟方法 用途
GPS 信号 通过 telnet 发送经纬度 测试导航、位置服务
车辆速度 模拟 CAN 总线信号 测试车速相关的 UI 变化
屏幕旋转 模拟器工具栏旋转按钮 测试横竖屏适配
多屏联动 启动多个模拟器实例 测试仪表盘与中控交互

避坑指南:我曾经在模拟器上测试蓝牙连接,一切正常。结果上了真机,蓝牙死活连不上。后来发现,模拟器的蓝牙实现是虚拟的,跟真实硬件差异很大。所以,蓝牙、WiFi、NFC 这类硬件相关的功能,一定要在真机上验证。

13.2 真机调试:直面真实战场

模拟器跑得再好,最终还是要上真机。真机调试,才是真正考验你功底的时候。

13.2.1 连接真机

车机真机调试,跟手机调试不太一样。车机通常没有 USB 调试开关,需要进入工程模式才能开启。

步骤:
1. 进入设置 → 系统 → 关于本机
2. 连续点击「版本号」7次,开启开发者模式
3. 返回设置 → 系统 → 开发者选项
4. 开启「USB 调试」
5. 用 USB 线连接电脑
6. 运行 adb devices 确认连接

我遇到过一种情况:adb devices 能识别,但 logcat 就是没输出。后来发现是车机的 USB 端口供电不足。换了一根带屏蔽的数据线,问题就解决了。所以,线材很重要。

13.2.2 无线调试

车机在车上,电脑在办公室,怎么调试?

无线调试就派上用场了。

# 确保车机和电脑在同一网络
adb connect 192.168.1.100:5555
# 如果连接不上,先通过 USB 设置端口
adb tcpip 5555
adb connect 192.168.1.100:5555
注意:无线调试不稳定,尤其是车机在移动中。我建议只用于静态调试,比如在停车场或实验室里。开车时别搞,安全第一。

13.3 日志分析:从海量信息中找线索

日志分析,是每个车载开发者的基本功。车机的日志量,比手机大得多。因为除了 Android 系统日志,还有车载特有的 CAN 总线日志、音频路由日志、电源管理日志等等。

13.3.1 logcat 的进阶用法

很多人只会用 adb logcat,然后被海量信息淹没。其实,logcat 有很多过滤技巧:

# 按标签过滤
adb logcat -s CarService

# 按优先级过滤(只显示错误和警告)
adb logcat *:E *:W

# 同时过滤多个标签
adb logcat -s CarService:V CarAudioService:D

# 保存到文件
adb logcat -d > crash_log.txt

# 实时输出并保存
adb logcat | tee logcat_output.txt

我个人习惯,在开发阶段就加上自定义标签:

Log.d("MyApp_Navigation", "导航启动,目标地址:" + destination);
Log.e("MyApp_Navigation", "导航失败,错误码:" + errorCode);

这样,出问题时能快速定位到自己的代码。

13.3.2 车载特有的日志

车机系统里,有几个关键的日志源:

  • CarService 日志:车辆状态、空调、门窗等
  • AudioService 日志:音频焦点、音量调节、声道切换
  • Vehicle HAL 日志:CAN 总线数据、传感器数据
  • SystemUI 日志:状态栏、通知栏、快捷设置
我的经验:遇到音频问题,先看 AudioService 日志。有一次用户反馈导航语音和音乐同时播放,我一看日志,发现是音频焦点没有正确释放。说白了,就是代码里少调了一个 abandonAudioFocus()

13.4 性能测试工具:让数据说话

性能问题,不能靠「感觉」。你得用数据说话。

13.4.1 常用性能指标

指标 说明 车载场景下的阈值
启动时间 从点击图标到首帧显示 < 2秒(导航类 < 1秒)
帧率(FPS) 界面流畅度 > 30fps(地图 > 45fps)
内存占用 应用使用的 RAM < 200MB(低配车机 < 100MB)
CPU 使用率 应用占用的 CPU 时间 < 20%(后台 < 5%)
冷启动时间 进程被杀后重新启动 < 3秒

13.4.2 使用 Profiler 工具

Android Studio 自带的 Profiler,是我最常用的工具。它能实时监控 CPU、内存、网络、能耗。

操作步骤:
1. 连接真机或启动模拟器
2. 点击底部「Profiler」标签
3. 选择要监控的进程
4. 点击「Record」开始记录
5. 操作应用,模拟用户行为
6. 点击「Stop」结束记录
7. 分析生成的报告

你想想看,如果发现内存一直在涨,那八成是内存泄漏。用 Profiler 的「Memory」视图,可以抓取 Heap Dump,然后分析哪些对象没有被回收。

13.4.3 车载专用性能测试

车载场景下,有些性能测试是特有的:

  • 多任务切换测试:导航 + 音乐 + 电话同时运行,看系统是否卡顿
  • 长时间运行测试:连续运行 8 小时,看内存是否泄漏
  • 低电量模式测试:模拟车辆电瓶电量低,看应用是否降级
  • 温度测试:车机在高温下(比如夏天暴晒),看是否降频或崩溃

避坑指南:我曾经有一个导航应用,在实验室测试一切正常。结果用户反馈,开车 2 小时后导航卡死。我查了日志,发现是地图缓存没有及时清理,导致内存溢出。后来加了一个定时清理缓存的机制,问题就解决了。所以,长时间运行测试一定要做。

13.5 本章知识体系

下面这张图,总结了本章的核心内容:

车载测试与调试知识体系 测试与调试 模拟器使用 真机调试 日志分析 性能测试工具 创建配置 场景模拟 USB连接 无线调试 logcat过滤 车载日志源 Profiler 车载专用测试 核心原则:模拟器先行 → 真机验证 → 日志定位 → 性能优化

说白了,测试和调试就是一套组合拳。模拟器帮你快速验证逻辑,真机帮你发现硬件问题,日志帮你定位 bug,性能工具帮你优化体验。四者缺一不可。

我记得刚入行时,有个前辈跟我说:「写代码只占 30% 的时间,剩下 70% 都在调试。」当时我不信,现在信了。所以,把这一章的内容吃透,你的开发效率至少能翻一倍。

公众号:蓝海资料掘金营,微信deep3321