You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级Kotlin 1.2.40后Room数据库构建报错:kapt出现NoClassDefFoundError

解决Kotlin 1.2.40升级后Room数据库kapt崩溃问题

我来帮你搞定这个升级Kotlin后碰到的Room kapt崩溃问题!这个NoClassDefFoundError本质上是Kotlin元数据处理库版本不兼容导致的——Kotlin 1.2.40调整了元数据的内部结构,而你当前用的Room(或者它依赖的kotlin-metadata相关库)还是基于旧版Kotlin的元数据逻辑,自然找不到对应的类了。

下面给你几个靠谱的解决方案:

  • 优先升级Room到兼容Kotlin 1.2.x的版本
    Room 1.1.1及以后的版本已经对Kotlin 1.2系列做了适配,直接把Room的依赖升级到这个版本就能解决大部分问题。在你的Module级build.gradle里更新:

    implementation "android.arch.persistence.room:runtime:1.1.1"
    kapt "android.arch.persistence.room:compiler:1.1.1"
    

    另外,如果你的项目里显式声明了kotlin-metadata-jvm依赖,一定要让它的版本和Kotlin版本保持一致:

    implementation "org.jetbrains.kotlin:kotlin-metadata-jvm:1.2.40"
    
  • 排查并排除冲突的依赖
    有些第三方库会偷偷引入旧版本的kotlin-metadata-jvm,造成版本冲突。你可以用Gradle命令查看依赖树,找出冲突来源:

    ./gradlew app:dependencies
    

    找到所有kotlin-metadata-jvm的引用后,在Room编译器的依赖声明里排除旧版本:

    kapt("android.arch.persistence.room:compiler:1.1.1") {
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-metadata-jvm'
    }
    

    这样就能强制使用你项目里指定的Kotlin 1.2.40版本的元数据库了。

  • 清理缓存后重新构建
    有时候旧的编译缓存会搞出奇怪的问题,试试这些操作:

    1. 点击Android Studio顶部菜单的Build -> Clean Project
    2. 接着点击Build -> Rebuild Project
    3. 如果还是不行,手动删除项目根目录下的.gradle文件夹和Module里的build文件夹,然后重新同步项目

要是以上方案都没解决,你可以暂时把Kotlin版本降级到1.2.31(这个版本和旧版元数据库兼容性更好),等Room后续版本完全适配后再升级——不过还是优先推荐升级Room,这才是长期的解决办法。

内容的提问来源于stack exchange,提问作者Andre Rocha

火山引擎 最新活动