Appearance
Android 信号 KSP 注解改造
使用 @UnityMessage 注解 + KSP 编译期生成注册码,替代手写信号注册,减少模板代码。
背景
Unity 与 Android 原生之间的双向通信需要"信号注册"——每个信号都要在两端各写一遍模板代码:
kotlin
// 手写注册(重复劳动)
SignalDispatcher.register("unity_map_center", MapCenterHandler())
SignalDispatcher.register("unity_camera_state", CameraStateHandler())
SignalDispatcher.register("unity_layer_switch", LayerSwitchHandler())
// ... 20+ 个信号每增加一个新信号,需要:
- Unity 端定义信号名
- Android 端注册 handler
- 两端各维护一份信号清单
容易遗漏、容易拼错。
方案
@UnityMessage 注解
kotlin
@UnityMessage("unity_map_center")
class MapCenterHandler : SignalHandler {
override fun handle(data: String) {
// 处理 Unity 发来的地图中心数据
}
}KSP 编译期代码生成
kotlin
// KSP Processor
class UnityMessageProcessor : SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
val symbols = resolver.getSymbolsWithAnnotation("UnityMessage")
// 生成注册代码:
// SignalDispatcher.register("unity_map_center", MapCenterHandler())
val file = FileSpec.builder("com.xpeng.signal", "SignalRegistry")
.addFunction(generateRegisterFunction(symbols))
.build()
file.writeTo(codeGenerator)
}
}编译后自动生成 SignalRegistry.kt:
kotlin
// 自动生成,勿手动修改
fun registerAllSignals() {
SignalDispatcher.register("unity_map_center", MapCenterHandler())
SignalDispatcher.register("unity_camera_state", CameraStateHandler())
// ... 全部自动生成
}收益
- 新增信号:加一个
@UnityMessage注解即可,零注册代码 - 编译期检查:信号名拼写错误在编译时就能发现
- 代码量减少 ~60%(不需要手写注册模板)
公开版深化
案例定位
Android 信号 KSP 注解改造不是孤立笔记,而是AI 与工具链能力下的一个可复用案例。它服务于“小鹏一张图 / SR 渲染引擎”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
使用 @UnityMessage 注解 + KSP 编译期生成注册码,替代手写信号注册,减少模板代码。
这篇文章已经覆盖 背景、方案、收益。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 代码量减少 ~60%(不需要手写注册模板)
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。
公开版深化
案例定位
Android 信号 KSP 注解改造不是孤立笔记,而是AI 与工具链能力下的一个可复用案例。它服务于“小鹏一张图 / SR 渲染引擎”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
使用 @UnityMessage 注解 + KSP 编译期生成注册码,替代手写信号注册,减少模板代码。
这篇文章已经覆盖 背景、方案、收益。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 代码量减少 ~60%(不需要手写注册模板)
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。
公开版深化
案例定位
Android 信号 KSP 注解改造不是孤立笔记,而是AI 与工具链能力下的一个可复用案例。它服务于“小鹏一张图 / SR 渲染引擎”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
使用 @UnityMessage 注解 + KSP 编译期生成注册码,替代手写信号注册,减少模板代码。
这篇文章已经覆盖 背景、方案、收益。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 代码量减少 ~60%(不需要手写注册模板)
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。