gradle在build时时如何知道要去扫描Realm相关的数据模型类的?
gradle在build时时如何知道要去扫描Realm这些数据模型类的?因为这个类继承了子类RealmObject?
deepseek回答:
Realm 在编译时扫描 HDCoinBean
类主要通过以下机制实现:
1. 注解处理器触发扫描
当类继承 RealmObject
或使用 @RealmClass
注解时,Realm 的注解处理器(realm-annotations-processor
)会自动识别并处理这些类。关键触发点:
- 继承关系检测:
extends RealmObject
会触发 Realm 的类扫描 - 注解标记:
@PrimaryKey
等注解明确指示该类需要被处理
2. **KAPT 处理流程
在 build.gradle
中配置的 Realm 插件会注册注解处理器:
apply plugin: 'realm-android' // 自动注册注解处理器
编译时流程:
- KAPT 阶段:扫描所有带
@RealmClass
或继承RealmObject
(即extends RealmObject
)的类 - 代码生成:为每个模型类生成
RealmProxy
类(如HDCoinBeanRealmProxy.java
) - 元数据收集:生成
DefaultRealmModule
包含所有模型类信息
3. **自定义模块控制
若要限制扫描范围,需显式定义 RealmModule
:
@RealmModule(classes = [HDCoinBean::class]) // 只包含指定类
class CustomModule
并在初始化时指定:
Realm.init(this)
val config = RealmConfiguration.Builder().modules(CustomModule()).build()
4. **验证扫描结果
查看构建生成的中间文件:
app/build/generated/source/kapt/debug/io/realm/HDCoinBeanRealmProxy.java
若存在该文件,说明类已被成功扫描处理。
关键点总结
- 继承
RealmObject
是主要触发条件 - 注解处理器通过 KAPT 实现自动化扫描
- 可通过自定义模块精准控制扫描范围