Android Module Loading
This guide covers Android-specific module loading with androidContext() and androidLogger().
info
For core module concepts (declaration, includes, overrides), see Modules. For lazy module loading, see Lazy Modules.
Starting Koin on Android
With Annotations
@KoinApplication
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin<MainApplication> {
androidLogger()
androidContext(this@MainApplication)
}
}
}
With DSL
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
// Android logger
androidLogger()
// or with level
androidLogger(Level.DEBUG)
// Android context
androidContext(this@MainApplication)
// Modules
modules(appModule, networkModule, dataModule)
}
}
}
Android-Specific Functions
| Function | Description |
|---|---|
androidContext() | Provides Application context in definitions |
androidApplication() | Provides Application instance in definitions |
androidLogger() | Android Logcat logger for Koin |
Using Android Context
val androidModule = module {
single { DatabaseHelper(androidContext()) }
single { SharedPrefsManager(androidContext()) }
single { NotificationHelper(androidApplication()) }
}
Dynamic Module Loading
Load or unload modules at runtime based on Activity lifecycle:
class FeatureActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Load feature-specific dependencies
loadKoinModules(featureModule)
super.onCreate(savedInstanceState)
}
override fun onDestroy() {
super.onDestroy()
// Clean up when leaving feature
unloadKoinModules(featureModule)
}
}
Use Cases
- Premium features - Load only when user has subscription
- Debug tools - Load only in debug builds
- Optional features - Load on-demand
// Premium feature module
val premiumModule = module {
viewModel<PremiumViewModel>()
single<PremiumRepository>()
}
class PremiumActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
if (userHasPremium()) {
loadKoinModules(premiumModule)
}
super.onCreate(savedInstanceState)
}
}
Lazy Loading on Android
For background module loading, use lazy modules:
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@MainApplication)
// Critical modules load immediately
modules(coreModule)
// Non-critical modules load in background
lazyModules(analyticsModule, syncModule)
}
}
}
info
For complete lazy modules documentation including parallel loading, see Lazy Modules.
Next Steps
- Modules - Core module concepts
- Lazy Modules - Background loading
- Multi-Module Apps - Gradle multi-module architecture