Skip to content

编译器插件

编译器插件挂钩到编译过程,在代码编译时对其进行分析或更改,而无需修改编译器本身。例如,它们可以注解代码或生成新代码,使其与其它框架或 API 兼容。

本页介绍了可用的 Kotlin 编译器插件,并说明了如果这些插件都不适合您的用例,您该如何处理。

Kotlin 团队维护以下编译器插件:

插件描述
All-open自动将带注解的类及其成员设为 open,以便框架可以在运行时对其进行扩展。
AtomicFU将原子操作转换为针对特定平台的高效实现,以实现无锁并发。
DataFrame生成类型化 API,让您能够以安全且符合 Kotlin 习惯的方式使用 DataFrame
jvm-abi-gen生成应用二进制接口 (ABI) JAR。
js-plain-objects将 Kotlin 类公开为普通 JavaScript 对象,以提高与 JS 工具和库的互操作性。
kapt在 Kotlin 代码上运行 Java 注解处理器并生成额外的源文件。
Lombok使 Kotlin 代码能够理解并使用 Java 源码中由 Lombok 注解生成的代码。
no-arg为带注解的类生成无参构造函数,以支持需要它们的框架。
Power-assert通过显示表达式各部分的详细值来增强断言失败信息。
SAM with receiver允许 SAM 接口使用带接收者的 lambda 表达式,以实现更接近 DSL 的语法。
Serialization生成无需反射即可对 Kotlin 对象进行序列化和反序列化的代码。

Google 的 Android 团队维护:

插件描述
Compose compiler Gradle plugin将 Compose 编译器与 Gradle 集成,以启用声明式 UI 功能和 Compose 特有的优化。
Parcelize plugin自动生成 Parcelable 实现,以便您在 Android 组件之间传递 Kotlin 对象。

如果您需要以这些插件未涵盖的方式调整编译过程,请先检查是否可以使用 Kotlin 符号处理 (KSP) API 或外部 Linter,例如 Android lint。 您可以浏览我们的 Kotlin Slack联系我们并就您的用例征求建议。

如果您仍然找不到所需内容,可以创建自定义编译器插件。请仅将此方法作为最后手段,因为 Kotlin 编译器插件 API 是不稳定的。如果您创建了自定义编译器插件,则需要投入大量的后续精力进行维护,因为每个新的编译器版本都会引入破坏性变更。