앞선 내용에서 kmp로 만든 코드를 macOS용 library를 만들고, 이를 flutter plugin에 포함시키는 방법을 알아봤습니다.
이번에는 kmp로 작성한 코드를 windows용도의 dll로 빌드하고 flutter plugin으로 만드는 방법을 설명합니다.
하고자 하는것은 아래와 같은습니다.
- kmp로 공용화시킬 함수를 작성한다
- windows 용 dll 파일로 빌드한다.
- flutter plugin에서 dll 파일을 읽어 해당 함수를 호출한다.
- flutter에서 사용 가능하도록 생성한 plugin을 배포한다.
호출할 함수의 정의
flutter에서 dll을 로드하고 함수를 호출하려면 반드시 extern C로 선언된 함수만 가능합니다. 또한 kmp로 작성한 코드를 flutter에서 호출하려면 이는 top-level function으로 선언되어야만 가능합니다. 이 두가지가 가장 핵심이므로 꼭 지켜야 합니다.
또한 호출하려는 함수는 shared/commonMain안에 위치해야 합니다.
//TestInterface.kt
@OptIn(ExperimentalNativeApi::class)
@CName("inputTest")
fun inputTest(number: String): Int {
println("inputTest() - number:$number")
return 100
}
shared/commonMain/kotlin/com.xxx.xx.../TestInterface.kt 를 생성합니다.
Top level function으로 inputTest() 함수를 생성하고 @CName을 주어 외부에서 호출하기 쉽도록 선언합니다.
Gradle 구성
shared/build.gradle.kts에 아래와 같이 추가합니다.
kotlin {
...
mingwX64("native") {
binaries {
sharedLib {
baseName = "TestLib"
}
}
}
...
}
터미널에서 하기와 같은 명령어를 수행합니다.
./gradlew linkNative
또는 해당 명령어를 gradle task 목록에서 직접 찾아서 수행할수 도 있습니다. (debug, release 각각 따로 빌드 가능)
물론 해당 빌드는 윈도우 pc에서 수행해야 합니다. (macOS용 xcFramework을 만드는건 mac os에서만 가능하듯이..)
빌드된 DLL 파일은 "shared/build/bin/native/" 폴더 아래 존재합니다.
flutter plugin에서 dll를 load하는 방법은 다음 포스팅에서 확인 가능합니다.
'개발이야기 > Kotlin' 카테고리의 다른 글
[KMP] KMP 라이브러리를 Flutter에서 사용하기 - flutter plugin에서 dll load #4 (0) | 2025.01.26 |
---|---|
[KMP] KMP 라이브러리를 Flutter에서 사용하기 - Flutter Plugin에 KMP xcFramework Library import #2 (0) | 2025.01.14 |
[KMP] KMP 라이브러리를 Flutter에서 사용하기 - MacOS SharedLibrary 빌드 #1 (0) | 2025.01.14 |
[Kotlin] v1.9 Language 변경점 - data object, value class, enum entries (0) | 2023.08.22 |
[Design pattern] Visitor pattern (0) | 2022.12.27 |