注解器
Jugg 只对少量明确列出的注解入口提供内置增量处理,并把对应生成源码纳入本轮源码编译。对于已有 Hilt 生成物,Jugg 还能在 DEX 生成前恢复 Android 入口 class 的 Hilt 字节码形态。其他 APT、KAPT 或 KSP processor 默认交给 Gradle;项目可通过自定义编译器接入专用适配器。
支持范围
| 注解 / 入口 | 是否支持 | 实现方式 |
|---|---|---|
新增 com.tencent.kuikly.core.annotations.Page / @Page 页面 | 支持 | 基于已有路由入口补充缺失注册,并将更新后的入口加入本轮源码编译 |
删除、重命名或修改已有 Kuikly @Page 路由 | 不支持 | 不移除旧路由注册,需要由 Gradle 重新生成完整入口 |
ARouter @Route / @Autowired / @Interceptor | 支持 | 本轮相关输入与业务 class 不同时运行项目处理器,支持项目 APT/KAPT 和 KSP1/KSP2,生成 Java/Kotlin 参与编译;检测失败仅 warn 并跳过,真实生成失败或生成类消失时停止 |
使用 KSP1 的 com.squareup.moshi.JsonClass / @JsonClass | 支持 | 通过项目 KSP1 compiler plugin 生成 Moshi adapter,并继续源码编译 |
使用 KSP2 的 com.squareup.moshi.JsonClass / @JsonClass | 不支持 | 不独立运行 KSP2 processor,只能继续编译 Gradle 已生成的源码 |
DataBinding <layout> | 支持 | 通过专用 DataBinding annotation processor 生成 mapper、BR 和绑定相关源码 |
使用 Hilt 2.41~2.60.1 修改已有 @AndroidEntryPoint / @HiltAndroidApp 入口的普通逻辑 | 支持入口转换 | 复用最近一次 Gradle/Hilt 构建生成的 Hilt_* 等产物,在 DEX 前恢复父类、super 调用和 Receiver 注入入口 |
| 修改 Hilt 注入字段、binding、构造依赖或入口注解 | 不支持重新生成 | 不运行 Hilt/Dagger processor;需要主动执行 Gradle 构建刷新生成代码和组件图 |
NOTE
除上表明确列出的入口外,Jugg 不会默认独立运行其他 annotation processor。项目可以通过自定义编译器提供对应适配器;没有适配器时,相关源码需要重新生成应使用 Gradle 构建。
使用边界
- Kuikly
@Page增量处理依赖最近一次 Gradle/KSP 生成的路由入口基线,并且只补充缺失注册。删除页面、修改路由或重命名页面类时,应通过 Gradle 清理旧注册。 - ARouter 需项目 processor 依赖:APT/KAPT 使用
AROUTER_MODULE_NAME或moduleName,KSP 使用项目实际的AROUTER_MODULE_NAME或MODULE_NAME参数;同 id 自定义处理器实例已加载时由该实例接管,适配器需按当前 Jugg 接口重新编译。Fragment 选择、迁移和已知边界见自定义编译器。 - ARouter 普通方法体、同值常量及默认值的等价写法不重新生成;与当前业务 class 比较全部相关注解输入。无法关联或解析时本模块本轮旧索引可能滞后,正常源码编译继续;若 class 随后更新,不保证下一轮自动补生成;生成类收缩仍要求完整 Gradle 构建。具体支持边界见自定义编译器。
- Moshi KSP 只在本轮 Kotlin 源码明确使用
com.squareup.moshi.JsonClass且项目存在对应 KSP 依赖时触发。 - ARouter KSP1/KSP2 使用当前变体的项目 processor、引擎和参数重新生成,只消费本轮成功产物。Moshi KSP2 仍只能继续编译 Gradle 已生成的源码。
- Hilt 入口转换已对照 Hilt
2.41~2.60.1的官方转换语义,并兼容2.41~2.48.1的 Receiver 字段标记与2.49起使用的注解标记。它只处理已有生成物对应的 Android 入口 class,不代表 Jugg 可以独立运行 Hilt/Dagger 注解处理器。普通方法逻辑变化可以增量生效;任何需要更新生成代码或组件图的修改都应先执行完整 Gradle 构建。 - 如果入口 class 对应的
Hilt_*生成父类不存在或不可读,本轮编译会明确失败并提示运行完整 Gradle 构建,不会把未转换的 class 继续生成 DEX。 - 修改 processor 依赖、compiler plugin、参数或生成规则后,工程模型变化时先完成 Sync,再执行 Gradle 构建刷新生成源码基线。