본문 바로가기
개발/안드로이드

HiltWorker사용시 Could not create Worker 오류 해결

by 장모 2022. 12. 13.

Hilt로 WorkManager를 Inject하려면 WorkerFactory를 만들어서 넘겨줘야한다. 

 

@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {

  @Inject lateinit var workerFactory: HiltWorkerFactory

  override fun getWorkManagerConfiguration() =
      Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
}

 

 

workManager 2.6.0-alpha01부터는 startup을 사용해 초기화하기 때문에  

AndroidManifest에서 startup을 사용하지 않게 변경하거나 startup에서 workManager를 초기화하지 않도록 해야한다. 가이드문서에서는 아래 코드로 링크가 걸려있다. 

 

 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities=\"${applicationId}.androidx-startup"
    android:exported="false"
    tools:node=\"merge">
    <!-- If you are using androidx.startup to initialize other components -->
    <meta-data
        android:name="androidx.work.impl.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
 </provider>
 
 <!-- If you want to disable android.startup completely. -->
 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove">
 </provider>

 

그런데 두가지 방법 중 위의 방법으로는 안된다. 왜냐면 2.7.0-alpha01부터 패키지가 변경되었기 때문! impl을 제거하고 아래처럼 작성하면 된다. 

 

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities=\"${applicationId}.androidx-startup"
    android:exported="false"
    tools:node=\"merge">
    <!-- If you are using androidx.startup to initialize other components -->
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
 </provider>

댓글