Skip to main content
Version: 4.2

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

FunctionDescription
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