본문으로 바로가기
반응형

앞선 내용에서 kmp로 만든 코드를 macOS용 library를 만들고, 이를 flutter plugin에 포함시키는 방법을 알아봤습니다.

이번에는 kmp로 작성한 코드를 windows용도의 dll로 빌드하고 flutter plugin으로 만드는 방법을 설명합니다.

하고자 하는것은 아래와 같은습니다.

  1. kmp로 공용화시킬 함수를 작성한다
  2. windows 용 dll 파일로 빌드한다.
  3. flutter plugin에서 dll 파일을 읽어 해당 함수를 호출한다.
  4. 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하는 방법은 다음 포스팅에서 확인 가능합니다.

 

반응형