Android Kotlin Room: AppDatabase_Impl does not exist

文章目录

    Android 4.1.2 测试 Android Room 的使用,在 coroutine 中调用 Room.databaseBuilder 时,报错

    AppDatabase_Impl does not exist

    Google 了半天没有头绪,这个报错也太抽象了。最后在参考了 Room 官方文档之后,
    才发现是 gradle 的配置问题。

    解决方法

    修改 app gradle.build 的配置,增加 plugin kotlin-kapt,如下:

    plugins {
        id 'com.android.application'
        id 'kotlin-android'
        id 'kotlin-kapt'
    }
    

    然后确认 room 相关的这三个依赖存在:

    implementation 'androidx.room:room-runtime:2.2.5'
    implementation "androidx.room:room-ktx:2.2.5"
    kapt   'androidx.room:room-compiler:2.2.5'
    

    错误的配置

    我是看了官方 Room 的配置才发现配置的问题的。

    https://developer.android.com/training/data-storage/room

    之前报错的根源是,在代码中 import room 时,android studio 给我自动添加的 room 依赖。

    而这段自动添加的依赖存在两处问题:

    • 没有 room-ktx 依赖。而 room-ktx 恰好是 Kotlin Extensions and Coroutines support for Room。
    • room-compiler 使用了 annotationProcessor 而不是 kapt,同时需要引入 kotlin-kapt plugin。

    延伸

    gradle.build 配置中 annotationProcessor 与 kapt 区别

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式