Room 架构文件何时/如何生成?

Whi*_*ron 8 android android-room

哪个 gradle 任务/Studio 功能生成 Room 架构文件?是否存在跳过文件生成的情况?

几周前,我进行了一些更改,本应更改架构文件,但该文件并未更改。现在我做了一个新的更改(删除了一个实体,包括 Room 数据库类中实体的引用),现在所有更改都出现在架构文件中。

-> 为什么现在生成了架构文件,但在过去几天/几周的众多构建之一中却没有生成?

当我在构建项目之前将其删除时,该架构似乎会更可靠地生成。但这显然不是强制性的,因为当我今天删除该实体时它也起作用......

我读了这个问题,但我的 build.gradle 中已经有以下几行:

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
Run Code Online (Sandbox Code Playgroud)
    def room_version = "2.1.0"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
Run Code Online (Sandbox Code Playgroud)

Dan*_*cua 5

如果 Room “看到”您更改了@Entity类中的某些内容(可能会导致新模式)和/或您更改了 中的某些内容@Database(例如更新版本、添加或删除实体等),则会生成新的模式 JSON 文件。

例如,重命名带@Entity注释的类中的字段应该会导致生成文件。同时添加一个新字段@Ignore不应该。

实际生成架构的 Gradle 任务是Kotlin 中的compileDebugJavakaptDebugKotlinif (均用于调试变体)。Room 是一个注释处理器,因此它在编译期间完成工作,分析代码、生成新代码并生成架构 JSON 文件。