移除annotationProcessor "androidx.room:room-compiler:$room_version"后仍可构建,原因何在?
为什么移除Room的
annotationProcessor依赖后应用仍能正常构建? 我之前构建Android应用时使用的Room配置如下:
def room_version = '2.5.0' implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
今天我移除了annotationProcessor "androidx.room:room-compiler:$room_version"这一行,应用居然还是能完整构建成功。我的应用确实用到了@Dao、@Entity等Room注解,我本来以为必须配置annotationProcessor才能让这些注解正常工作,请问这是怎么回事?
核心原因主要有两种:
- AGP 7.0+ 的自动注解处理器发现功能:从Android Gradle Plugin 7.0(对应Android Studio Arctic Fox及以后版本)开始,AGP会自动扫描所有依赖中的注解处理器。Room的
room-compiler符合Java注解处理器的标准规范(包含javax.annotation.processing.Processor服务声明),所以AGP会自动把它加入编译路径,完成注解处理工作——比如生成Dao的实现类、数据库的实现类等,不需要你手动声明annotationProcessor依赖。 - 间接依赖引入了room-compiler:你的项目里可能有其他第三方库或者模块,已经在自身依赖中声明了
room-compiler,通过Gradle的依赖传递特性,这个处理器被自动引入到了你的主项目中。这种情况下,即使你删掉自己的配置,依然能获取到该依赖。
验证方式
如果你想确认具体是哪种原因,可以执行下面的Gradle命令查看注解处理器的依赖树:
./gradlew app:dependencies --configuration annotationProcessor
在输出结果里找到androidx.room:room-compiler,就能明确它的来源。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

