作者:究极逮虾户
链接:https://juejin.cn/post/6939472660573192206
大家退后,今天我要开始表演一下装逼的艺术。这次我们尝试性的使用谷歌前一阵子公布的ksp(Kotlin Symbol Processing),一款专门拿来给Kotlin
项目提升注解生成速度的。
在ksp
出来以前,对于这种注解解释器,我们使用的都是java所提供的AbstractProcessor
,我在以前的文章介绍过关于AbstractProcessor相关的内容。这次我们就来啃一啃谷歌的新东西,毕竟只要我E的够快,谁的问好都追不上我。
Kotlin Symbol Processing (KSP) is an API that you can use to develop lightweight compiler plugins. KSP provides a simplified compiler plugin API that leverages the power of Kotlin while keeping the learning curve at a minimum. Compared to KAPT, annotation processors that use KSP can run up to 2x faster.
官方对于ksp的介绍就是,这是一个轻量级替换kapt的一个方案,优点就是速度更快,参数更少更简单一点。但是天下武功唯快不破啊,编译速度提升这种事情吧,毕竟都很难。
同时ksp
相比于kapt
接入方式也更清凉,还有就是它本身也支持增量编译等。有兴趣的老哥可以仔细阅读下谷歌对于ksp
的介绍,下面是传送门。
小贴士 ksp其实可以做到kapt中的ast的对类进行修改的操作哦,可以让各位牛逼的大佬大展拳脚,直接修改当前kotlin文件。
开始项目介绍吧
这次我们从头开始撸一个实现了ksp的compiler,至于代码就还是放在我们的路由组件内,毕竟如果从头写一个带注解的也有点不知所措,还是在历史的Demo上开发吧,下面是地址哦。
由于官方文档中推荐我们使用gradle.kts
,所以这次对项目整体进行了升级。这部分后续会更新另外一个文章,凡事还是逃不开真香定律的,这东西相比于Groovy
对开发也更友善一点,毕竟kts还是强类型语言。
第一步
第一步比较简单,主要是对项目的根目录的Gradle进行配置上的修改,让我们可以顺利的获取到ksp
的引用。虽然比较简单但是也比较关键,我完成kts的改造和顺利的引入ksp大概花了一个周末的时间,虽然有一部分时间我在带娃。
首先在项目的根目录下settings.gralde.kts
文件下加入如下代码,划重点哦是settings.gradle.kts
哦。
pluginManagement {
repositories {
gradlePluginPortal()
google()
maven("https://dl.bintray.com/kotlin/kotlin-eap")
}
}
复制代码
这个会帮助我们去获取ksp plugin
的依赖。同时由于ksp
的依赖于kotlin plugin 1.4.30
版本,所以我们要对kt插件版本也进行一次升级。
build.gradle.kts
下添加如下代码即可。
buildscript {
repositories {
j