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' // 自动注册注解处理器

编译时流程:

  1. KAPT 阶段:扫描所有带 @RealmClass 或继承 RealmObject (即extends RealmObject)的类
  2. 代码生成:为每个模型类生成 RealmProxy 类(如 HDCoinBeanRealmProxy.java
  3. 元数据收集:生成 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 实现自动化扫描
  • 可通过自定义模块精准控制扫描范围
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐