2. 开发环境搭建:Qt for MCU 与 Qt for Android 环境配置、交叉编译工具链安装、模拟器与真机调试环境准备

好,咱们直接进入正题。这一章要解决的是「工欲善其事,必先利其器」的问题。很多新手在车载HMI开发中,一半的时间都耗在环境搭建上。我个人习惯是先把环境理清楚,再动手写代码,这样后面会顺畅很多。

车载HMI开发,说白了就是两个方向:一个是跑在MCU上的轻量级界面,另一个是跑在Android系统上的复杂交互。Qt for MCU 和 Qt for Android 就是对应的两套工具链。咱们一个一个来拆解。

2.1 Qt for MCU 环境配置

Qt for MCU 是专门为资源受限的微控制器设计的。它不依赖完整的操作系统,直接跑在裸机或RTOS上。我在项目中遇到过,很多团队上来就想用Qt Quick,结果发现MCU根本跑不动——嗯,这里要注意选对版本。

2.1.1 安装Qt for MCU SDK

首先,你需要从Qt官网下载Qt for MCU SDK。目前最新的稳定版是2.x系列。安装步骤其实不复杂:

  1. 下载对应操作系统的安装包(Windows/Linux/macOS)
  2. 运行安装程序,选择安装路径(我建议不要有中文和空格)
  3. 选择目标MCU平台(比如STM32、NXP i.MX RT系列)
  4. 等待安装完成

小提示: 安装时记得勾选「Examples」和「Documentation」,这两个在后续开发中非常有用。我曾经因为没勾选,后面找示例代码找了半天。

2.1.2 交叉编译工具链安装

交叉编译,说白了就是在你的电脑上编译出能在MCU上运行的代码。你需要安装对应MCU厂商的编译器。

以STM32为例:

# 下载ARM GCC工具链
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

# 解压到指定目录
tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/

# 配置环境变量
export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin

警告: 编译器版本一定要和Qt for MCU SDK匹配。我见过有人用了太新的编译器,结果链接阶段报一堆莫名其妙的错误。建议直接用Qt官方推荐的版本。

2.1.3 配置Qt Creator

安装好SDK和工具链后,需要在Qt Creator中配置:

  1. 打开Qt Creator,进入「工具」→「选项」→「设备」
  2. 添加「MCU」类型的设备
  3. 选择对应的编译器(比如arm-none-eabi-g++)
  4. 配置调试器(比如J-Link、ST-Link)

配置完成后,你可以创建一个简单的Qt for MCU项目试试。我记得第一次编译成功时,看到那个小屏幕亮起来,还是挺有成就感的。

2.2 Qt for Android 环境配置

Android平台的车载HMI,现在越来越主流。毕竟Android生态成熟,开发效率高。但配置起来也比MCU复杂一些。

2.2.1 安装Android SDK和NDK

Qt for Android 需要依赖Android官方的开发工具包。你需要安装:

  • Android SDK:提供编译和打包工具
  • Android NDK:提供交叉编译工具链(用于编译C++代码)
  • Java JDK:Android编译需要Java环境

我个人习惯用Android Studio来管理SDK版本,这样比较方便:

# 安装Android Studio后,通过SDK Manager安装:
# - Android SDK Platform 31 (或你目标Android版本)
# - Android SDK Build-Tools 31.0.0
# - Android NDK (建议使用21.x或22.x版本)

关键点: NDK版本一定要和Qt版本兼容。Qt 6.2以上推荐NDK 23+,Qt 5.15推荐NDK 21-22。我曾经因为版本不匹配,编译时卡在「undefined reference」错误上,折腾了两天才发现是NDK版本问题。

2.2.2 配置Qt Creator的Android套件

打开Qt Creator,进入「工具」→「选项」→「设备」→「Android」:

  1. 设置JDK路径(比如 /usr/lib/jvm/java-11-openjdk-amd64)
  2. 设置Android SDK路径(比如 ~/Android/Sdk)
  3. 设置Android NDK路径(比如 ~/Android/Sdk/ndk/23.1.7779620)
  4. 设置Android SDK的API级别(建议设置为你目标设备的API级别)

配置好后,你会看到Qt Creator自动识别出Android的构建套件(Kit)。

2.3 模拟器与真机调试环境准备

环境搭好了,总得有个地方跑程序吧?模拟器和真机调试,各有各的用处。

2.3.1 Qt for MCU 模拟器

Qt for MCU 自带了一个桌面模拟器,可以在你的电脑上模拟MCU运行效果。这个对于前期开发非常有用,不用每次都烧录到板子上。

启动模拟器的方法:

# 在Qt Creator中选择「Desktop」构建套件
# 直接点击运行按钮,就会启动模拟器窗口

模拟器支持触摸事件模拟、屏幕旋转等功能。但要注意,模拟器的性能比真实MCU好很多,所以动画效果在模拟器上流畅,不代表在真机上流畅。我建议在模拟器上主要验证逻辑,性能优化还是得靠真机。

2.3.2 Qt for Android 模拟器

Android模拟器可以用Android Studio自带的AVD Manager创建。建议创建和车载设备分辨率一致的模拟器:

  • 分辨率:1920x720(常见车载横屏分辨率)
  • API级别:和你的目标Android版本一致
  • 内存:至少2GB(车载应用通常比较吃内存)

小技巧: 启动模拟器时加上 -gpu host 参数,可以启用GPU加速,界面渲染会流畅很多。我平时调试UI布局时,都用这个模式。

2.3.3 真机调试环境

真机调试才是最终检验。你需要:

  1. MCU真机:通过JTAG/SWD接口连接调试器(如J-Link、ST-Link)
  2. Android真机:通过USB连接,开启开发者模式和USB调试

Android真机调试的典型步骤:

# 1. 在手机上开启「开发者选项」和「USB调试」
# 2. 连接USB线到电脑
# 3. 检查设备是否识别
adb devices
# 应该看到类似输出:0123456789ABCDEF device

# 4. 在Qt Creator中选择Android设备作为运行目标
# 5. 点击运行,Qt会自动编译、打包、安装、启动应用

注意: 有些车载Android设备(比如基于Android的IVI系统)可能限制了USB调试权限。我曾经遇到一个项目,车机系统锁了adb端口,最后只能通过网线连接来调试。所以建议提前确认目标设备的调试方式。

2.4 环境验证:跑一个Hello World

环境配好了,咱们跑个简单的程序验证一下。以Qt for MCU为例:

// main.cpp
#include <QApplication>
#include <QScreen>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QQuickView view;
    view.setSource(QUrl("qrc:/main.qml"));
    view.show();
    
    return app.exec();
}

对应的QML文件:

// main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15

Rectangle {
    width: 480
    height: 272
    color: "#2E3B4E"
    
    Text {
        anchors.centerIn: parent
        text: "Hello 车载HMI!"
        color: "white"
        font.pixelSize: 24
    }
}

如果能在模拟器或真机上看到这个界面,恭喜你,环境搭建成功了!

2.5 常见问题与避坑指南

最后,分享几个我踩过的坑:

  • 路径问题:Qt Creator的构建目录不要包含中文和空格,否则编译会报一些奇怪的错误
  • 版本匹配:Qt版本、编译器版本、SDK版本、NDK版本,一定要相互兼容。建议用Qt官方提供的版本组合表
  • 权限问题:Linux下安装工具链时,注意目录权限。我曾经把工具链装到/root下,结果普通用户编译不了
  • USB驱动:Windows下连接MCU调试器,需要安装对应的USB驱动。很多新手卡在这一步

嗯,环境搭建这部分就讲到这里。下一章咱们开始写第一个真正的车载HMI界面。记住,环境搭好了,后面才能跑得快。