You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级androidx.lifecycle至2.5.0后ViewModelFactory编译报错求助

解决lifecycle:2.5.0升级后ViewModelFactory编译错误的方案

错误原因

androidx.lifecycle:lifecycle库升级到2.5.0后,ViewModelProvider.Factory接口新增了带@JvmDefault注解的默认方法,而Kotlin编译器默认不支持继承包含这类方法的接口,因此会抛出编译错误:Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option。

解决方法

方法一:开启Kotlin编译参数

在模块级的build.gradle(或build.gradle.kts)中添加-Xjvm-default编译参数,支持继承带默认方法的接口:

Groovy DSL(build.gradle)

android {
    // 保留原有配置
    kotlinOptions {
        jvmTarget = "1.8"
        // 添加以下参数,二选一即可
        // all:启用全量默认方法支持,推荐纯Kotlin项目使用
        freeCompilerArgs += ["-Xjvm-default=all"]
        // compatibility:兼容旧模式,适合混编项目
        // freeCompilerArgs += ["-Xjvm-default=compatibility"]
    }
}

Kotlin DSL(build.gradle.kts)

android {
    // 保留原有配置
    kotlinOptions {
        jvmTarget = "1.8"
        // 添加以下参数,二选一即可
        freeCompilerArgs += "-Xjvm-default=all"
        // freeCompilerArgs += "-Xjvm-default=compatibility"
    }
}

添加后执行Clean Project再Rebuild Project即可。

方法二:改用官方推荐的Factory实现方式

如果不想修改编译参数,可以使用lifecycle-viewmodel-ktx提供的简化API创建Factory,避免直接继承ViewModelProvider.Factory接口:

首先确保已添加lifecycle-viewmodel-ktx依赖(2.5.0版本):

// Groovy
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0"
// Kotlin DSL
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0")

然后用viewModelFactory扩展函数创建Factory:

import androidx.lifecycle.viewmodel.viewModelFactory

val bookingViewModelFactory = viewModelFactory {
    initializer {
        BookingViewModel(api, localStorage)
    }
}

或者在创建ViewModel时直接内联实现:

val viewModel = ViewModelProvider(this, object : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return BookingViewModel(api, localStorage) as T
    }
})[BookingViewModel::class.java]

注意事项

  • 如果之前尝试新方式仍报错,检查是否遗漏了ktx依赖,或执行Invalidate Caches / Restart清除缓存后重试。
  • 若项目包含Java代码实现ViewModelProvider.Factory,Java 8及以上版本默认支持接口默认方法,无需额外配置,但Kotlin代码仍需开启上述编译参数。

内容的提问来源于stack exchange,提问作者Eugene Troyanskii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:09:23