メインコンテンツまでスキップ

Android で Koin を始める

koin-android プロジェクトは、Koin の機能を Android の世界に提供することに特化しています。詳細については、Android セットアップ セクションを参照してください。

Application クラスから

Application クラスから、startKoin 関数を使用し、androidContext を使用して Android コンテキストを注入できます。

class MainApplication : Application() {

override fun onCreate() {
super.onCreate()

startKoin {
// Koin を Android ロガーに出力
androidLogger()
// Android コンテキストを参照
androidContext(this@MainApplication)
// モジュールをロード
modules(myAppModules)
}
}
}
備考

Application クラスから起動したくない場合は、どこからでも Koin を起動できます。

別の Android クラスから Koin を起動する必要がある場合は、startKoin 関数を使用し、Android の Context インスタンスを次のように指定できます。

startKoin {
// Android コンテキストを注入
androidContext(/* your android context */)
// ...
}

追加設定

Koin の設定 ( startKoin { } ブロックコード内) から、Koin のいくつかの部分を設定することもできます。

Android 向け Koin ロギング

KoinApplication インスタンス内には、AndroidLogger() クラスを使用する拡張機能 androidLogger があります。このロガーは、Koin ロガーの Android 実装です。

必要に応じて、このロガーを変更できます。

startKoin {
// Android ロガーを使用 - デフォルトで Level.INFO
androidLogger()
// ...
}

プロパティのロード

assets/koin.properties ファイルで Koin プロパティを使用して、キー/値を保存できます。

startKoin {
// ...
// assets/koin.properties からプロパティを使用
androidFileProperties()
}

Androidx Startup (4.0.1) で Koin を起動する [Experimental]

Gradle パッケージ koin-androidx-startup を使用すると、KoinStartup インターフェースを使用して、Application クラスで Koin 構成を宣言できます。

class MainApplication : Application(), KoinStartup {

override fun onKoinStartup() = koinConfiguration {
androidContext(this@MainApplication)
modules(appModule)
}

override fun onCreate() {
super.onCreate()
}
}

これは、通常 onCreate で使用される startKoin 関数を置き換えます。koinConfiguration 関数は KoinConfiguration インスタンスを返します。

備考

KoinStartup は、起動時にメインスレッドをブロックするのを避け、より優れたパフォーマンスを提供します。

Koin による起動依存関係

Koin をセットアップする必要があり、依存関係を注入できるようにする場合は、InitializerKoinInitializer に依存させることができます。

class CrashTrackerInitializer : Initializer<Unit>, KoinComponent {

private val crashTrackerService: CrashTrackerService by inject()

override fun create(context: Context) {
crashTrackerService.configure(context)
}

override fun dependencies(): List<Class<out Initializer<*>>> {
return listOf(KoinInitializer::class.java)
}

}