第二章:环境搭建—把工具箱备齐

各位同学,这一章我们干点实在的。工欲善其事,必先利其器,做SystemUI接口Mock开发和调试,有一半的坑都出在环境上。我见过太多人,代码写得挺好,结果连个Demo都跑不起来,搞半天是ADB版本不对,或者Java环境和Gradle打了个架。咱们今天就把这事儿捋干净。

2.1 整体环境拓扑

先给你一张全景图。别急着动手,看完它你心里就有数了,我们到底要装哪些东西、它们之间怎么配合的。

SystemUI Mock回放环境搭建架构 开发工作站 (Android Studio / VSCode) JDK 17 + Android SDK ADB + Fastboot 工具链 Mock服务器 (WireMock) 模拟器 / 真机 (SystemUI调试) Mock 接口存储与回放引擎 💡 说明:开发工作站通过ADB连接模拟器或真机,通过HTTP/Socket连接Mock服务器。 Mock服务器存储预录的接口数据,并在回放时替代真实网络接口。 环境搭建核心流程 ① 装JDK/SDK ② 配ADB ③ 部署Mock服务 ④ 验证联通

2.2 安装JDK与Android SDK

说实话,这一步其实是最没技术含量的,但也是出错率最高的。我遇到过有人装了个JDK 8就开干,结果Gradle直接罢工,因为SystemUI最低也要JDK 11,官方的建议是JDK 17。

我个人习惯用OpenJDK,省去Oracle的授权麻烦。你可以在Adoptium网站下载,或者直接用SDKMAN来管理。好,直接上命令:

# 安装OpenJDK 17(以Ubuntu/Debian为例)
sudo apt update
sudo apt install openjdk-17-jdk

# 验证安装
java -version
# 输出应包含 "OpenJDK 64-Bit Server VM" 和 "build 17.0.x"

# 设置 JAVA_HOME(建议写入 ~/.bashrc 或 ~/.zshrc)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

Android SDK呢?你装Android Studio时它会自带一份,但为了让我们脚本化操作更灵活,我建议你单独装Command Line Tools。不废话:

# 下载命令行工具(Linux/macOS)
wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip
unzip commandlinetools-linux-*.zip -d ~/android-sdk

# 安装常用SDK组件
~/android-sdk/cmdline-tools/latest/bin/sdkmanager \
  "platforms;android-34" \
  "build-tools;34.0.0" \
  "platform-tools" \
  "emulator"

💡 小技巧: 把 ~/android-sdk/platform-tools 和 ~/android-sdk/emulator 加入 PATH,后面用ADB、模拟器就省事多了。我就是这么干的,敲命令能少打半行路径。

2.3 ADB和Fastboot的配置校验

ADB是咱们和SystemUI设备沟通的桥梁。这一步其实很简单,但很多人装完就不管了。你想想看,一旦ADB版本和模拟器不匹配,会出现各种莫名其妙的闪退。

建议直接使用SDK Manager里的platform-tools,别自己去网上乱下。装完以后,跑一下这几条命令验证:

# 查看ADB版本
adb version
# 正常输出:Android Debug Bridge version 1.0.41

# 列出设备(先打开模拟器或连上真机)
adb devices
# 应显示:emulator-5554   device  或  xxxxxx   device

⚠️ 注意: 如果 adb devices 显示 unauthorized,去设备上确认RSA指纹授权。我曾经在连接一台国产平板时卡在这里半小时,后来发现是USB调试开关没完全打开。

Fastboot呢?主要用于刷机或重启到Bootloader。咱们做Mock回放一般用不到它,但如果你需要在真机上部署自定义SystemUI,你可能会用到。一样验证:

fastboot --version
# 输出类似:fastboot version 34.0.0-...  就说明正常

2.4 部署Mock服务器:WireMock

好的,重点来了。Mock服务器是咱们这套教程的灵魂。我用的是WireMock,因为它轻量,支持JSON配置,还能录制真实接口。很多人一上来就去配复杂的环境,我建议你先跑一个最简单的standalone版本,先通了再优化。

下载和启动,就这么简单:

# 下载WireMock standalone JAR(版本最新即可)
wget https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.35.0/wiremock-standalone-2.35.0.jar

# 启动,监听本机8080端口
java -jar wiremock-standalone-2.35.0.jar --port 8080

# 启动成功后你会看到:
# WireMock initialized. ... Listening on 0.0.0.0:8080

启动后,你打开浏览器访问 http://localhost:8080/__admin,如果能看到一个JSON管理界面,说明服务跑起来了。

工具/组件 版本要求 主要用途 验证方法
JDK ≥ 11(推荐17) 编译和运行SystemUI java -version
Android SDK API 34 + Build Tools 34 提供SystemUI AAR和依赖 sdkmanager --list
ADB ≥ 1.0.41 连接模拟器/真机调试 adb devices
WireMock ≥ 2.35.0 录制和回放Mock接口 http://localhost:8080/__admin

2.5 模拟器或真机端配置

如果你用模拟器,记得创建一个带Google APIs的镜像。SystemUI高度依赖系统服务,纯AOSP镜像有时会缺一些依赖,导致Mock接口推不进去。我踩过这个坑,花了大半天排查,结果换个镜像就好了。

# 用命令行创建模拟器(推荐使用API 34)
avdmanager create avd -n PX_34 -k "system-images;android-34;google_apis_playstore;x86_64"

# 启动模拟器
emulator -avd PX_34 -port 5554

真机呢? 真机部署其实更简单,只要能解锁Bootloader、刷入调试版SystemUI就行。注意:真机上热更新SystemUI需要root权限或者刷入userdebug版本。我建议初学者先在模拟器上练手,等Mock流程跑通了,再上真机验证。

2.6 IDE与Gradle配置(快速提示)

IDE我强烈推荐Android Studio。虽然VSCode配合Kotlin插件也能写,但SystemUI的项目结构太复杂了,AS的gradle sync和lint检查能帮你省很多事儿。咱们不做IDE的详细配置,但你要特别注意:

  • Gradle JDK 设为JDK 17,别用默认的Embedded JDK(有时版本落后)。
  • SDK Location 指向你刚才装的独立SDK目录。
  • 开启离线Mock环境:在 build.gradle 里加上 mockServerEnabled = true 的product flavor,这样编译时会自动引入Mock的stub类。

📌 小复盘: 环境搭建的核心目标是搞出一个“能编译、能部署、能Mock”的三角关系。编译靠JDK+SDK,部署靠ADB,Mock靠WireMock。三者打通,后面所有章节才有实战的基础。我个人习惯每搭完一步就立刻验证,绝不攒到最后一口气排查——否则问题堆起来,你就分不清是SDK没装全还是WireMock挂了。

好了,这些装好以后,你可以试着执行 adb shell dumpsys statusbar,看看能不能拿到数据。如果通了,嗯,你的环境就完备了。如果报错,回头检查一下环境变量和端口占用。