Hilt+WorkManager抛出NoSuchMethodException问题求助
Hilt与WorkManager集成时Worker实例化失败异常
异常日志
Could not instantiate my.example.package.widget.ExampleWorker java.lang.NoSuchMethodException: my.example.package.widget.ExampleWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters] at java.lang.Class.getConstructor0(Class.java:3325) at java.lang.Class.getDeclaredConstructor(Class.java:3063) at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95) at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:243) at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:145) at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) 14:26:51.737 E Could not create Worker my.example.package.widget.ExampleWorker
相关代码实现
ExampleWorker 代码
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted private val context: Context, @Assisted workerParameters: WorkerParameters, private val exampleUseCase: ExampleUseCase ) : CoroutineWorker(context, workerParameters) { companion object { private val uniqueWorkName = ExampleWorker::class.java.simpleName fun enqueue(context: Context) { val manager = WorkManager.getInstance(context) val requestBuilder = PeriodicWorkRequestBuilder<ExampleWorker>( Duration.ofMinutes(15) ) manager.enqueueUniquePeriodicWork( uniqueWorkName, ExistingPeriodicWorkPolicy.UPDATE, requestBuilder.build() ) } } override suspend fun doWork(): Result { exampleUseCase.invoke() return Result.success() } }
Hilt 应用类代码
@HiltAndroidApp class HiltApp : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
AndroidManifest.xml 配置
<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
依赖类 ExampleUseCase
class ExampleUseCase @Inject constructor() { operator fun invoke() {} }
依赖配置
implementation("com.google.dagger:hilt-android:2.48.1") ksp("com.google.dagger:hilt-android-compiler:2.48.1") implementation("androidx.hilt:hilt-work:1.0.0") ksp("androidx.hilt:hilt-compiler:1.0.0") implementation("androidx.work:work-runtime-ktx:2.8.1") implementation("androidx.work:work-runtime:2.8.1")
环境与升级背景
- Gradle插件版本:8.1.1
- Kotlin版本:1.9.10
- 近期升级内容:Gradle插件从7.4.1到8.1.1、Kotlin从1.8.0到1.9.10、Hilt从2.44.2到2.48.1、编译SDK从33到34
已尝试的解决方式
- 降级Hilt版本,出现新的兼容性异常;
- 移除Worker构造中的
exampleUseCase参数,异常消失但无法满足业务需求; - 尝试用
lateinit var注入exampleUseCase,调用时未完成初始化,无法正常使用。
已查阅大量官方文档仍未解决问题,恳请帮忙排查。
内容的提问来源于stack exchange,提问作者Olesya
相关产品推荐
相关产品推荐

