3、开发环境搭建:Android Studio配置、NDK与CMake、QNX SDK安装、Linux交叉编译链配置

说实话,做车载多屏互动项目,最磨人的往往不是业务逻辑,而是开发环境。我见过太多团队,代码写了两周,环境搭了一个月。嗯,今天咱们就把这块硬骨头啃下来。

这套环境涉及四个核心部分:Android Studio、NDK与CMake、QNX SDK、Linux交叉编译链。缺一个,你的多屏项目就跑不起来。我按实际搭建顺序来讲,你跟着走就行。

核心思路:先搭宿主开发环境(Android Studio),再补原生编译能力(NDK+CMake),然后装目标系统工具链(QNX SDK),最后配置交叉编译链做联调。每一步都有坑,我会把踩过的坑指出来。

3.1 Android Studio 配置

Android Studio 是咱们的主战场。多屏互动项目里,车机端、手机端、甚至手表端都可能跑 Android,所以这个 IDE 必须配稳。

版本选择:我个人习惯用 Hedgehog 或 Iguana 版本,太新的版本有时插件兼容性不好。你可以在 About Android Studio 里查看版本号。

必装组件:

  • Android SDK Platform 31+ —— 车机系统现在基本是 Android 12 起步
  • Android SDK Build-Tools 34+ —— 编译多屏模块需要较新的构建工具
  • Android SDK Command-line Tools —— 后面自动化打包会用到
  • Google Play Services —— 如果涉及 Car App 库,这个不能少

我在项目中遇到过一个问题:SDK Manager 里下载了 Platform,但 Gradle 编译时还是报 compileSdkVersion not found。后来发现是 SDK 路径配错了。建议你统一把 SDK 路径设到 C:\Android\Sdk(Windows)或 ~/Android/Sdk(Linux/macOS),别用默认的带空格的路径。

小技巧:在 local.properties 文件里手动指定 SDK 路径,比依赖 IDE 自动检测更稳。尤其是多人协作时,这个文件应该加入 .gitignore,但路径规范要写在项目文档里。

3.2 NDK 与 CMake 配置

多屏互动少不了 C/C++ 代码。屏幕采集、编解码、数据传输,这些底层模块几乎都用 NDK 开发。你想想看,如果纯用 Java 做视频帧处理,性能根本扛不住。

NDK 版本:我建议用 r25c 或 r26b。太老的版本不支持新架构,太新的版本可能跟 QNX 工具链有冲突。

安装步骤:

  1. 在 Android Studio 的 SDK Manager 里,切到 SDK Tools 标签
  2. 勾选 NDK (Side by side),选择你需要的版本
  3. 勾选 CMake,建议 3.22.1 以上
  4. 点击 Apply,等下载完成

CMakeLists.txt 配置示例:

cmake_minimum_required(VERSION 3.22)
project("multiscreen_native")

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加本地库
add_library(screen_capture SHARED
    src/screen_capture.cpp
    src/encoder.cpp
    src/network_sender.cpp
)

# 链接系统库
target_link_libraries(screen_capture
    android
    log
    mediandk
    camera2ndk
)

# 指定输出目录
set_target_properties(screen_capture PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../libs/${ANDROID_ABI}
)

我曾经犯过一个低级错误:在 CMakeLists.txt 里忘了加 log 库,结果 __android_log_print 一直编译不过。排查了整整半天。你记得把常用库都链上。

注意:NDK 的 ABI 选择要跟车机芯片匹配。目前主流车机用 arm64-v8a,少数老平台用 armeabi-v7a。x86 架构基本只在模拟器上用。别一股脑全编译,浪费时间。

3.3 QNX SDK 安装

QNX 是车载系统的老大哥。很多高端车机的仪表盘、中控屏都跑在 QNX 上。咱们的多屏互动项目,如果目标平台是 QNX,那这套 SDK 必须装。

获取方式:QNX SDK 需要向 BlackBerry 申请,或者从你的芯片供应商(比如高通、瑞萨)获取。一般会拿到一个 .bin 安装包。

安装流程:

  1. 给安装包加执行权限:chmod +x qnx-sdk-install.bin
  2. 运行安装:./qnx-sdk-install.bin
  3. 选择安装路径,我习惯放在 /opt/qnx 下
  4. 安装完成后,设置环境变量

环境变量配置(加到 ~/.bashrc 或 ~/.zshrc):

export QNX_HOST=/opt/qnx/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export QNX_CONFIGURATION=/etc/qnx

我记得第一次装 QNX SDK 时,忘了配 QNX_CONFIGURATION,结果编译时一直报 license not found。后来发现是 license 文件没放到正确位置。你装完后记得先跑一下 qcc --version 验证。

经验之谈:QNX 的编译器是 qcc,不是 gcc。它底层其实封装了 GCC,但加了很多 QNX 特有的参数。写 Makefile 时记得用 CC = qcc,别用 gcc。

3.4 Linux 交叉编译链配置

交叉编译链是连接开发机和目标板的桥梁。咱们在 x86 的电脑上写代码,编译出 arm 架构的可执行文件,然后丢到车机上跑。这就是交叉编译。

常见工具链:

目标平台 工具链名称 前缀
ARM 32位 arm-linux-gnueabihf arm-linux-gnueabihf-
ARM 64位 aarch64-linux-gnu aarch64-linux-gnu-
QNX ARM 64位 qcc (QNX自带) n/a

安装步骤(以 aarch64 为例):

  1. 安装工具链:sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
  2. 验证安装:aarch64-linux-gnu-gcc --version
  3. 写一个测试程序,交叉编译:aarch64-linux-gnu-gcc -o hello hello.c
  4. 用 file hello 查看,确认是 ELF 64-bit ARM 格式

CMake 交叉编译文件示例(toolchain.cmake):

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

使用时:cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..

我遇到过最坑的事:交叉编译出来的程序,在车机上跑起来就段错误。查了两天,发现是编译时用了宿主机的 glibc,而不是目标板的。你记得在 CMAKE_FIND_ROOT_PATH 里指定目标系统的库路径。

重要提醒:交叉编译链的版本必须跟车机系统的 glibc 版本匹配。比如车机是 glibc 2.31,你拿 2.35 的工具链编译,跑起来必崩。怎么查?在车机上执行 ldd --version,或者问供应商要系统信息。

3.5 环境验证清单

所有环境搭完后,我建议你跑一遍这个验证清单。别等到项目编译不过再回头查。

检查项 命令/方法 预期结果
Android Studio 版本 Help → About 显示版本号,无红色警告
NDK 版本 ndk-build --version 显示 r25c 或 r26b
CMake 版本 cmake --version 3.22.1 以上
QNX 编译器 qcc --version 显示 QNX 版本信息
交叉编译链 aarch64-linux-gnu-gcc -v 显示 GCC 版本,无错误
交叉编译测试 编译 hello.c 并 file 查看 ELF 64-bit ARM aarch64

这张表我建议你打印出来贴在工位上。每配完一项就打个勾,心里踏实。

开发环境搭建知识体系 车载多屏开发环境 Android Studio SDK Platform 31+ Build-Tools 34+ Command-line Tools Google Play Services NDK + CMake NDK r25c / r26b CMake 3.22.1+ CMakeLists.txt 配置 ABI: arm64-v8a QNX SDK QNX 7.1 / 8.0 qcc 编译器 环境变量配置 License 验证 交叉编译链 aarch64-linux-gnu toolchain.cmake glibc 版本匹配

环境搭好只是第一步。下一节咱们会讲项目结构怎么组织,代码怎么分层。但今天先把这些工具链跑通,别急着往下赶。我见过太多人环境没配好就急着写代码,最后编译报错一堆,心态直接崩了。

稳一点,把基础打牢。后面的事情就顺了。