Comments (5)
One thing that strikes me a bit odd is that your have implementation(libs.hilt.plugin)
which I understand as your project depending on the Hilt Gradle plugin as if it was a library with APIs to be used in your project but thats not quite how a Gradle Plugin is applied. Can you confirm you are indeed applying the plugin as described in https://dagger.dev/hilt/gradle-setup.html, either with the apply plugin
syntax or the newer plugins
DSL.
In essence HiltWorkerFactory
is a multibinding of all @HiltWorker
annotated so if you debug and breakpoint inside the factory you should see a map where you can confirm if the worker is in the map a signal that the multibinding module was picked up and generated. If you don't see it then either the @InstallIn
module based of the @HiltWorker
is not being generated or the multibinding is not being discovered because it is not a direct dependency of the app module or it is a transitive dependency but the Hilt Gradle Plugin which does aggregation is not being applied.
from dagger.
I am applying the plugin like this...
root build.gradle
buildscript {
repositories {
google()
mavenCentral()
jitpack()
}
dependencies {
classpath(libs.kotlingradleplugin)
classpath(libs.gradleplugin)
classpath(libs.play.services)
classpath(libs.undercouch.download)
classpath(libs.firebase.plugins)
classpath(libs.hilt.plugin)
classpath(libs.firebase.crashlytics.gradle)
classpath(libs.paparazzi.gradle)
}
}
plugins {
id("com.google.dagger.hilt.android") version "2.44.2" apply false
}
And in :app
and :core-ble
module...
plugins {
id("com.android.application") //this is just in :app
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
id("kotlin-parcelize")
id("dagger.hilt.android.plugin")
id("com.google.dagger.hilt.android")
}
I debugged HiltWorkerFactory
and the map is empty. So how can this be fixed in feature modules?
from dagger.
Can you please clarify if :core-ble
is a feature module as described in https://developer.android.com/guide/playcore/feature-delivery? If that is the case, then sadly having a Hilt worker in such module is not supported as those modules cannot be correctly aggregated as described in https://developer.android.com/training/dependency-injection/hilt-multi-module#dfm
If it is just a library module, as in a Gradle module, then can you try having :app
directly depend on :core-ble
?
from dagger.
Sorry it's not. It's just a module implemented by :app
from dagger.
I ended up writing my own WorkerFactory and injecting the necessary parameters there...
class BleWorkerFactory @Inject constructor(
private val bleServiceModule: BleServiceModule,
) : WorkerFactory() {
override fun createWorker(appContext: Context, workerClassName: String, workerParameters: WorkerParameters): ListenableWorker? {
return when (workerClassName) {
RemoteConfigSyncWorker::class.java.name -> RemoteConfigSyncWorker(appContext, workerParameters)
HardwareReportWorker::class.java.name -> HardwareReportWorker(appContext, workerParameters, bleServiceModule)
ActivitySyncWorker::class.java.name -> ActivitySyncWorker(appContext, workerParameters, bleServiceModule)
else -> null
}
}
}
@Singleton
class MyDelegatingWorkerFactory @Inject constructor(
bleWorkerFactory: BleWorkerFactory
) : DelegatingWorkerFactory() {
init {
addFactory(bleWorkerFactory)
}
}
In my application I do not implement Configuration.Provider since I got a RuntimeException: Unable to instantiate application
when overriding the workManagerConfiguration val. Instead I set the configuration in onCreate().
@HiltAndroidApp
open class RandomHiltApplication : MyApplication() {
@EntryPoint
@InstallIn(SingletonComponent::class)
interface WorkerFactoryEntryPoint {
fun workerFactory(): MyDelegatingWorkerFactory
}
override fun onCreate() {
val workManagerConfiguration: Configuration = Configuration.Builder()
.setWorkerFactory(EntryPoints.get(this, WorkerFactoryEntryPoint::class.java).workerFactory())
.setMinimumLoggingLevel(Log.VERBOSE)
.build()
WorkManager.initialize(this, workManagerConfiguration)
super.onCreate()
}
}
My Fastlane builds are now working and I am happy with it. Sadly, I couldn't find out, why the HiltWorkerFactory is not working.
from dagger.
Related Issues (20)
- KSP processing does not see member injections from typealiased superclass in 2.50 HOT 2
- Regression "warning: [cast] redundant cast to Map" when updating from 2.49 to 2.50 HOT 1
- Dagger-Hilt 2.49: Activity onCreate() and onDestroy() code is generated, but our base Activity class has these final HOT 3
- Dagger 2.50 produces code that calls deprecated method HOT 1
- Feature Request: lint rule for EarlyAccessPoint classes to prevent @Inject abuse HOT 13
- no
- Feature request: Add support for K2 compiler. HOT 2
- @HiltViewModel Unit test problem. HOT 2
- Getting `Unexpected annotation value: TransformedVisibilityMarker` error during unit test HOT 5
- @BindsInstance on Component.Factory supertype lambda parameters HOT 1
- SecurityException when trying to run UI test with hilt and Jetpack Compose on Android 14 HOT 3
- BadParcelableException in Activity onCreate HOT 3
- Dagger 2.50 KSP fails to generate field in implementation for a @Named field HOT 2
- Conflicting documentation for dagger.android and Hilt optional inject HOT 3
- [KSP] dagger-android hanging indefinitely on a large multi module project HOT 2
- Optional bindings in a parent component can sometimes use bindings from child components HOT 2
- NullPointerException dagger.spi.shaded.androidx.room.compiler.processing.XTypeElement.getAnnotation HOT 6
- Problem with Injection of DAO HOT 1
- error: [Hilt] Could not get element for com.foo.viewModels.FooViewModel_HiltModules.BindsModule: java.lang.NullPointerException HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dagger.