关于KAPT(kotlin annotation processor tool)的一些坑

最近打算使用Annotation Processor(注解处理器) + Gradle plugin来实现Android项目的路由框架,恰巧现在负责的Android项目都是使用kotlin作为开发语言,而且在官网看到kotlin有支持Annotation Processor的插件(http://kotlinlang.org/docs/reference/kapt.html),干脆就它了,结果撸代码过程个中滋味真的是跟吃了shi一样难受(这方面的资料国内实在是少),下面就记录下遇到的一些坑:

使用kapt后,Auto-Service没有在resources下生成注册注解处理器的文件

我们在定义自己的Processor后需要对这些注解处理器进行注册,否则javac压根不知道你有哪些注解处理器需要运行,一般来说我们可以手动创建一个特殊的文件 javax.annotation.processing.ProcessorMETA-INF/services目录下面,文件内容每一行就是一个处理器,如:

org.example.SampleProcessor
org.example.Sample2Processor

但是这样的工作每次要我们手动完成是挺蛋疼的,所以Google爸爸提供了一个裤子来为我们自动生成这些信息,就是com.google.auto.service:auto-service:1.0-rc4这个库(其实里面也就是定义了一个Annotation Processor来帮助我们生成这个文件),但是我用了这个库后发现运行项目后我的Processor死活运行不起来,于是我墙内外翻了个遍,找到篇有点关系的文章https://proandroiddev.com/hello-world-of-annotation-processing-in-kotlin-3ec0290c1fdd,重点是这句At the time of this article, 1.0-rc3 did not work, so I had to step back to 1.0-rc2.提到1.0-rc3无效(虽然我用的是rc4),但是我按照作者说的将版本改回1.0-rc2后依然无效。无奈只能自己手动添加这个文件了

在Android Studio3.0.1下使用kapt,出现各种莫名其妙的编译错误

首先,使用kapt后要调试Annotation Processor就已经够坑了(参考该文章https://medium.com/@daptronic/annotation-processing-with-kapt-and-gradle-237793f2be57),然而更坑的是同一个项目在我编译完一次后,Rebuild项目出现各种奇葩问题,比如运行的是我上一次修改的代码,中间我尝试把其中一个Processor删了,然后注册文件里面也把该Processor给删掉,结果运行一直报错:无法找到这个我已经删掉的Processor,同样是墙内外翻了个遍也没找到原因。但是我发现每次我关掉AS后再打开,该问题就不出现了,所以怀疑是跟编译的Daemon进程有关,果断执行gradle --stop再rebuild项目,一切正常!!!原本我以为是我自己的一些配置导致的(用的是Mac机器),于是回到家我用Windows电脑再次写了一个demo,直接无法rebuild了。。。。。(报的错误是无法删除generate目录下的文件,明显就是有进程占用了这个文件),解决方法同上,一个字:真TM坑

巨坑,使用kapt后,Processor中打印的warning级别以下的日志不会在控制台中输出

这个问题实在是让我比吃了shi更加难受,一开始以为是默认配置的问题,于是查找官方文档,在gradle.properties文件添加了kapt.verbose=true,满心欢喜的rebuild项目,结果问题依旧,Google了半天也没找到相关问题,Stack Overflow上提问也石沉大海,最后直接去撸了下源码没发现问题在哪(实在是没时间撸了,有兴趣的可以到https://github.com/JetBrains/kotlin/tree/master/pluginshttps://github.com/JetBrains/kotlin/tree/master/libraries/tools这两个路径下应该有你想要的,也可以灵活使用github搜索功能搜“kapt3”等关键词),因为我切换成AS自带的AnnotationProcessor运行项目是可以正常打印NOTE类型的log的,所以肯定是kapt封装的使用做了什么奇怪的动作
在kotlin:1.2.20版本中该问题已解决 https://youtrack.jetbrains.com/issue/KT-19203

事隔几天才记录下来,目前想到的就这几个,想起来再加吧。。继续造轮子去。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 本文章涉及代码已放到github上annotation-study 1.Annotation为何而来 What:A...
    zlcook阅读 29,119评论 15 116
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 前面写了Android 开发:由模块化到组件化(一),很多小伙伴来问怎么没有Demo啊?之所以没有立刻放demo的...
    涅槃1992阅读 8,008评论 4 37
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,748评论 6 342
  • 当没有选择的时候,却在苦苦追寻;而当有选择的时候,却又产生了烦恼。 我不知道,是自己太瞻前顾后,还是本身不...
    语凤阅读 144评论 0 0