第二章:环境搭建—把工具箱备齐
各位同学,这一章我们干点实在的。工欲善其事,必先利其器,做SystemUI接口Mock开发和调试,有一半的坑都出在环境上。我见过太多人,代码写得挺好,结果连个Demo都跑不起来,搞半天是ADB版本不对,或者Java环境和Gradle打了个架。咱们今天就把这事儿捋干净。
2.1 整体环境拓扑
先给你一张全景图。别急着动手,看完它你心里就有数了,我们到底要装哪些东西、它们之间怎么配合的。
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,看看能不能拿到数据。如果通了,嗯,你的环境就完备了。如果报错,回头检查一下环境变量和端口占用。