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

WorkManager+Hilt问题:无法创建带自定义参数的Worker

解决Hilt在非App模块中构造带自定义参数Worker的问题

问题分析

你遇到的NoSuchMethodException本质是WorkManager仍在尝试用默认构造函数(仅接收Context和WorkerParameters)实例化OrderFcmWorker,而非通过Hilt的HiltWorkerFactory注入自定义参数,说明Hilt的Worker配置存在遗漏。

解决方案

1. 确保order模块配置Hilt依赖

非App模块需要完整配置Hilt和Hilt-Work的依赖及插件,在order模块的build.gradle中添加:

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'dagger.hilt.android.plugin'
}

dependencies {
    // Hilt核心依赖
    implementation "com.google.dagger:hilt-android:2.44"
    kapt "com.google.dagger:hilt-android-compiler:2.44"
    // Hilt-Work适配依赖
    implementation "androidx.hilt:hilt-work:1.0.0"
    kapt "androidx.hilt:hilt-compiler:1.0.0"
    // WorkManager基础依赖(如果未添加)
    implementation "androidx.work:work-runtime-ktx:2.7.1"
}

2. 修正WorkManager自动初始化配置

移除整个InitializationProvider会影响其他Startup库的功能,正确做法是仅禁用WorkManager的自动初始化,保留其他Provider。在App模块的AndroidManifest.xml中使用以下配置:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
</provider>

3. 确认Worker注解和构造函数正确性

确保OrderFcmWorker的注解和构造函数未导错包:

// 注意导入的是androidx.hilt.work.HiltWorker
import androidx.hilt.work.HiltWorker
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject

@HiltWorker
class OrderFcmWorker @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted params: WorkerParameters,
    private val userRepo: UserRepo
) : CoroutineWorker(context, params) {
    // Worker实现代码
}

4. 验证模块依赖与Provider配置

  • 确保App模块的build.gradle中已添加order模块的依赖:
    implementation project(':order')
    
  • 你的HomeServiceWorkerModule配置正确,UserRepo的Provider会被Hilt识别,无需额外调整。

5. 清理重建项目

Hilt的注解处理器生成的代码可能存在缓存,执行以下操作:

  • 点击Android Studio的Build → Clean Project
  • 再点击Build → Rebuild Project

验证

完成上述步骤后,WorkManager会通过HiltWorkerFactory实例化OrderFcmWorker,自动注入UserRepo参数,不再抛出构造函数不存在的异常。

内容的提问来源于stack exchange,提问作者Chandra Sekhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29