본문으로 건너뛰기

Kotlin Multiplatform App에서 정의 및 모듈에 대한 어노테이션

KSP 설정

공식 문서에 설명된 대로 KSP 설정을 따르십시오: Kotlin Multiplatform을 사용한 KSP

Koin Annotations에 대한 기본 설정이 포함된 Hello Koin KMP 프로젝트를 확인할 수도 있습니다.

KSP 플러그인 추가

plugins {
alias(libs.plugins.ksp)
}

common API에서 어노테이션 라이브러리 사용:

sourceSets {
commonMain.dependencies {
implementation(libs.koin.core)
api(libs.koin.annotations)
// ...
}
}

그리고 올바른 sourceSet에 KSP를 구성하는 것을 잊지 마십시오:

dependencies {
add("kspCommonMainMetadata", libs.koin.ksp.compiler)
add("kspAndroid", libs.koin.ksp.compiler)
add("kspIosX64", libs.koin.ksp.compiler)
add("kspIosArm64", libs.koin.ksp.compiler)
add("kspIosSimulatorArm64", libs.koin.ksp.compiler)
}

Common Modules & KMP Expect Components 선언

commonMain sourceSet에서 expect 클래스 또는 함수의 네이티브 구현을 가질 패키지를 스캔할 Module을 선언하기만 하면 됩니다.

아래에는 PlatformHelper expect 클래스가 있는 com.jetbrains.kmpapp.platform 패키지에서 스캔하는 PlatformModule이 있습니다. 모듈 클래스는 @Module@ComponentScan 어노테이션으로 어노테이트됩니다.

// in commonMain

@Module
@ComponentScan("com.jetbrains.kmpapp.platform")
class PlatformModule

// package com.jetbrains.kmpapp.platform

@Single
expect class PlatformHelper {
fun getName() : String
}
노트

생성된 코드는 각 플랫폼 구현에서 수행됩니다. 모듈 패키지 스캔은 올바른 플랫폼 구현을 수집합니다.

Native Components에 어노테이트

각 구현 sourceSet에서 올바른 플랫폼 구현을 정의할 수 있습니다. 이러한 구현은 @Single (다른 정의 어노테이션일 수 있음)로 어노테이트됩니다.

// in androidMain
// package com.jetbrains.kmpapp.platform

@Single
actual class PlatformHelper(
val context: Context
){
actual fun getName(): String = "I'm Android - $context"
}

// in nativeMain
// package com.jetbrains.kmpapp.platform

@Single
actual class PlatformHelper(){
actual fun getName(): String = "I'm Native"
}