KNOI Gradle Plugin 模块分析
1. 模块概述
knoi-gradle-plugin 是一个为 Android 和 Kotlin Multiplatform 项目提供 KNOI 支持的 Gradle 插件,核心功能包括:
- 依赖注入:动态注入 KNOI 注解、处理器和核心库的依赖。
- 配置生成:生成 KSP 参数文件供 KSP 处理器使用。
- 任务注册:注册自定义任务(如
BinariesPublishForbiddenTask)。
2. 依赖注入详解
概念
依赖注入(DI)是一种解耦代码的设计模式,通过外部提供依赖(而非内部创建),提升灵活性和可测试性。
实现方式
- 构造函数注入:通过构造函数传递依赖(如
Car(engine: Engine))。 - 属性注入:通过属性赋值(如
car.engine = Engine())。 - 方法注入:通过方法参数传递(如
car.setEngine(engine))。
在模块中的应用
- 动态依赖选择:根据
debug模式决定从本地模块或远程仓库加载依赖。fun getKNOIAnnotationDependencies(extension: KnoiExtension, project: Project): Any { return if (extension.debug) { project.project(":knoi-annotation") // 本地模块 } else { "com.tencent.kuiklybase:knoi-annotation:${getKNOIVersion(extension)}" // 远程仓库 } } - 解耦依赖管理:通过
KnoiExtension配置依赖版本和来源。
3. 依赖注入分支流程图
graph TD
A[KnoiPlugin.apply] --> B[创建KnoiExtension]
B --> C{检测项目类型}
C -->|Android项目| D[调用injectAndroidConfig]
C -->|Kotlin Multiplatform项目| E[调用injectKNOIConfig]
D --> F[添加Android KSP依赖]
F --> G[注入Android配置]
E --> H[检查KSP插件]
H -->|KSP未应用| I[抛出错误]
H -->|KSP已应用| J[配置KSP依赖]
J --> K[添加KNOI注解和处理器依赖]
K --> L[生成KSP参数文件]
L --> M[写入配置文件]
E --> N[注册BinariesPublishForbiddenTask]
N --> O[绑定到generateMetadataTask]
特点总结
- 动态性:依赖来源和任务注册由外部配置控制。
- 安全性:强制检查 KSP 插件,避免运行时错误。
- 可测试性:通过 DI 轻松替换模拟依赖。
核心文件
KnoiPlugin.kt:插件入口,注册扩展和任务。KnoiExtension.kt:定义 Gradle 扩展配置。InjectKnoiDependencies.kt:处理通用项目的依赖注入。InjectAndroidKnoiDependencies.kt:处理 Android 项目的依赖注入。BinariesPublishForbiddenTask.kt:定义禁止发布二进制文件的任务。
主要流程
graph TD
A[KnoiPlugin.apply] --> B[创建KnoiExtension]
B --> C[检测Android项目]
C --> D[注入Android配置]
B --> E[检测Kotlin Multiplatform项目]
E --> F[注入KNOI配置]
F --> G[生成KSP参数]
F --> H[注册任务]
G --> I[写入配置文件]
H --> J[注册BinariesPublishForbiddenTask]
D --> K[添加Android KSP依赖]
K --> L[注入Android配置]
关键逻辑
1. 插件入口 (KnoiPlugin.kt)
apply方法:- 创建
KnoiExtension扩展配置。 - 检测 Android 项目并调用
injectAndroidConfig。 - 检测 Kotlin Multiplatform 项目并调用
injectKNOIConfig。 - 在项目评估完成后,生成 KSP 参数并注册任务。
- 创建
2. 依赖注入 (InjectKnoiDependencies.kt)
- KSP 插件检查:确保项目已应用 KSP 插件。
- 依赖注入:
- 为支持的平台(Android JVM 和 Native)配置 KSP 依赖。
- 添加 KNOI 注解和处理器依赖。
- KSP 参数配置:通过配置文件传递参数给 KSP 处理器。
- 版本管理:从
version.txt读取版本号,支持调试模式和发布模式。
3. 任务注册 (KnoiPlugin.kt)
BinariesPublishForbiddenTask:- 如果是二进制模块,注册该任务以防止二进制文件发布。
- 任务依赖于
generateMetadataFileForOhosArm64Publication。
4. Android 支持 (InjectAndroidKnoiDependencies.kt)
- KSP 依赖注入:为 Android 项目添加 KSP 依赖。
- 配置注入:在项目评估完成后注入 Android 配置。
总结
knoi-gradle-plugin 模块通过 Gradle 插件机制,为 Android 和 Kotlin Multiplatform 项目提供了 KNOI 的集成支持。其核心功能包括依赖注入、配置生成和任务注册,确保了 KNOI 的灵活性和可扩展性。