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

Gradle依赖更新后Hilt抛出SAVED_STATE_REGISTRY_OWNER_KEY异常求助

解决 CreationExtras must have a value by SAVED_STATE_REGISTRY_OWNER_KEY 异常

排查与修复步骤

1. 对齐Hilt与AndroidX Lifecycle依赖版本

Gradle 8.5.2 + Kotlin 2.0.0的组合下,Hilt 2.52可能和新版AndroidX Lifecycle库存在兼容性问题:

  • 确保hilt-android与hilt-compiler版本完全一致,同时检查androidx.lifecycle:lifecycle-viewmodel-savedstate、androidx.lifecycle:lifecycle-viewmodel-ktx的版本是否适配当前Hilt版本。
  • 建议将Hilt版本升级至2.53.1,该版本对Gradle 8.x和Kotlin 2.0的适配性更完善。

2. 规范ViewModel的注入写法

  • 必须使用@HiltViewModel注解标记ViewModel,且SavedStateHandle参数通过Hilt自动注入,禁止手动实例化:
    @HiltViewModel
    class MyViewModel @Inject constructor(
        private val savedStateHandle: SavedStateHandle
    ) : ViewModel() {
        // 业务逻辑
    }
    
  • 不要手动调用ViewModelProvider创建带SavedStateHandle的ViewModel,必须依赖Hilt的工厂完成注入。

3. 检查宿主组件的Hilt配置

  • 承载ViewModel的Activity/Fragment必须添加@AndroidEntryPoint注解,这是Hilt注入ViewModel的必要前提:
    @AndroidEntryPoint
    class MainActivity : AppCompatActivity() {
        private val viewModel: MyViewModel by viewModels()
        // ...
    }
    
  • 排查是否存在自定义ViewModelProvider.Factory的场景,若有需确保其正确传递SavedStateRegistryOwner相关的CreationExtras参数。

4. 清理缓存并重建项目

  • 执行Gradle命令清理缓存并强制刷新依赖:
    ./gradlew clean build --refresh-dependencies
    
  • 同时清理Android Studio本地缓存(File → Invalidate Caches... → 勾选Clear file system cache and local history → Restart),避免旧编译缓存引发的版本冲突。

5. 验证Kotlin编译配置

确保项目的Kotlin编译目标与Java 17对齐:

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

内容的提问来源于stack exchange,提问作者Ashish yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:53:13