第4章 环境搭建:操作系统要求、依赖库安装、NDK/SDK配置、测试设备准备

帧率监控与掉帧定位工具的开发需要在特定平台上编译、链接和部署。本章围绕全栈开发环境搭建展开,涵盖操作系统选型、基础依赖库安装、Android NDK/SDK 配置以及测试设备准备。完成本章后,你可以在本地编译项目、连接真机或模拟器,并运行最初的调试验证程序。

4.1 操作系统要求

推荐操作系统及最低版本如下表所示。开发机建议使用 Ubuntu 20.04 或 Windows 10 20H2 以上,macOS 推荐 Monterey 并安装 Xcode Command Line Tools。

操作系统推荐版本最小内存备注
Ubuntu / Debian20.04 LTS、22.04 LTS8 GB包管理器 apt,默认 GCC 9 / 11
WindowsWindows 10 20H2 / Windows 118 GB需安装 MSVC 或 MinGW
macOSMonterey (12.0) 或更高8 GB必须安装 Xcode Command Line Tools
提示:如果你的主机只有 4 GB 内存,仍然可以安装 Linux 轻量发行版 + swap 分区,但编译大型项目(如 ffmpeg 或完整 NDK 工具链)时可能会慢很多。建议至少配置 8 GB 内存 + SSD。

4.2 依赖库安装

帧率监控工具需要以下核心依赖:CMake(构建系统)、Ninja(加速构建)、Python 3(辅助脚本)、Git(版本控制)、Vulkan SDK / OpenGL(图形 API 接口)、FFmpeg libavutil(时间戳处理)、libyuv(YUV 转换)以及 perf / simpleperf(Linux 性能计数器)。

以 Ubuntu 20.04 为例,一键安装主要依赖:

sudo apt update
sudo apt install -y cmake ninja-build python3 python3-pip git \
    libvulkan-dev vulkan-tools libgl1-mesa-dev \
    libavutil-dev libswresample-dev libyuv-dev \
    linux-tools-common linux-tools-generic linux-tools-`uname -r`

macOS 使用 Homebrew:

brew install cmake ninja python git vulkan-sdk ffmpeg libyuv

Windows 使用 vcpkg 或 chocolatey:

choco install cmake ninja python3 git vulkan-sdk ffmpeg libyuv
重要:Windows 下 Vulkan SDK 需要手动将 VULKAN_SDK 环境变量添加到系统路径。安装完成后重启终端,运行 vulkaninfo 确认正确安装。

4.3 NDK 与 SDK 配置

Android 开发环境要求:

  • Android NDK:推荐 r25 或 r26(r23 以上支持 CMake 工具链)。
  • Android SDK:API level 31(Android 12)或更高;建议同时安装 platform-tools(包含 adb)。
  • Java JDK:OpenJDK 11 或 17(用于 Gradle/Android Studio)。

下载 NDK 并解压到 /opt/android-ndk(Linux/macOS)或 C:\Android\ndk(Windows)。然后设置全局环境变量:

# Linux / macOS (添加至 ~/.bashrc 或 ~/.zshrc)
export ANDROID_NDK_HOME=/opt/android-ndk
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
export PATH=$ANDROID_NDK_HOME:$ANDROID_SDK_ROOT/platform-tools:$PATH
# Windows (系统变量)
set ANDROID_NDK_HOME=C:\Android\ndk
set ANDROID_SDK_ROOT=%USERPROFILE%\AppData\Local\Android\Sdk
set PATH=%PATH%;%ANDROID_NDK_HOME%;%ANDROID_SDK_ROOT%\platform-tools

验证 NDK 工具链可用:

ls $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/
# 应看到 aarch64-linux-android21-clang 等文件
快速测试:使用 NDK 自带的 cmake 工具链编译一个空项目:
mkdir test && cd test
echo "int main(){}" > main.c
$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=arm64-v8a \
    -DANDROID_PLATFORM=android-31 \
    -DCMAKE_BUILD_TYPE=Release \
    -S . -B build
cmake --build build
如果生成 libtest.so 或可执行文件,说明 NDK 配置正确。

4.4 测试设备准备

帧率监控工具最终运行在 Android 真机 或 模拟器 上。推荐配置:

设备类型最低系统版本开放权限调试工具
Android 真机(ARM64)Android 10 (API 29)开发者选项 → USB 调试、Stay Awake、不锁定屏幕adb, scrcpy, Perfetto
Android Emulator (x86_64)Android 11 镜像 (API 30)同上 + 支持 Vulkan/OpenGL ES 3.1adb, GPU Inspector
PC 验证(Linux/macOS)Ubuntu 20.04 或 macOS 12+无需额外权限perf, simpleperf, Vulkan Profiles

连接真机后验证:

adb devices
# 输出类似:
# List of devices attached
# 0123456789ABCDEF    device
建议:在真机上开启“不保留活动”和“显示刷新率”开发者选项,便于直接观察掉帧现象。

4.5 环境验证脚本

运行以下 Bash 脚本一键检测所有环境依赖是否就绪(保存为 check_env.sh):

#!/bin/bash
echo "=== 帧率监控开发环境检查 ==="

# 1. 操作系统
echo "[OS] $(uname -a)"

# 2. 基础工具
for cmd in cmake ninja python3 git adb; do
    which $cmd > /dev/null 2>&1 && echo "[OK] $cmd" || echo "[FAIL] $cmd not found"
done

# 3. NDK
if [ -d "$ANDROID_NDK_HOME" ]; then
    echo "[OK] ANDROID_NDK_HOME=$ANDROID_NDK_HOME"
else
    echo "[FAIL] ANDROID_NDK_HOME not set or directory missing"
fi

# 4. Vulkan SDK
vulkaninfo --summary 2>/dev/null | head -1 && echo "[OK] Vulkan" || echo "[WARN] Vulkan info missing"

# 5. adb 连接
adb get-state 2>/dev/null && echo "[OK] Device connected" || echo "[WARN] No device/emulator"

echo "=== 完成 ==="
预期输出:所有 [OK] 状态表示环境准备完毕。如果有 [FAIL] 或 [WARN],请根据提示对应安装缺失组件。
帧率监控开发环境搭建流程图 操作系统选择 Ubuntu 20.04+ Windows 10+ macOS 12+ 安装依赖库 CMake · Ninja · Python3 · Git · Vulkan · FFmpeg · libyuv · perf NDK / SDK 配置 ANDROID_NDK_HOME · ANDROID_SDK_ROOT 测试设备准备 真机 / 模拟器 · adb · 权限开启 环境验证脚本 说明:流程自上而下,每个阶段完成后再进入下一步;NDK/SDK 与测试设备可并行准备。

常见错误与避坑指南

  • NDK 路径问题:误将 NDK 解压到包含空格的目录(如 C:\Program Files\),导致 CMake 无法解析路径。解决方案:使用纯英文路径且无空格。
  • Vulkan 加载失败:模拟器默认使用 SwiftShader 软件渲染,不支持 Vulkan。必须勾选模拟器硬件加速(Graphics: Hardware - GLES)。
  • adb 未授权:真机连接后需在手机端点击“允许 USB 调试”,并勾选“始终允许这台计算机”。
  • JDK 版本不匹配:Android Gradle 插件 8.0+ 要求 JDK 17。如果使用 JDK 8,编译会报错。推荐使用 OpenJDK 17。
  • libyuv 缺失:某些包管理器可能不提供 libyuv 开发包。替代方案:手动克隆并编译 https://chromium.googlesource.com/libyuv/libyuv。
性能优化建议:在 Linux 下使用 ccache 可加速重复编译;在 macOS 下使用 sccache 效果类似。Windows 可启用 /MP 多进程编译。这些工具能显著缩短后续调试阶段的等待时间。