첫 번째 Kotlin 멀티플랫폼 라이브러리 만들기

13058 단어 multiplatformkotlin
코트린 멀티플랫폼 기술is becoming more and more popular과 생태계가 빠르게 변화하고 있다.다중 플랫폼 라이브러리를 만들 생각은 없으십니까?지금은 창설하기에 좋은 시기입니다. 지역사회에 개방적인 수요가 많기 때문에 저희는 당신의 참여에 매우 감사합니다!
물론 라이브러리 작성자로서 코드를 작성하고 유용한 API를 제공하는 것이 가장 중요한 임무입니다.그러나 만약 당신이 처음으로 당신의 도서관을 출판한다면, 당신은 약간의 장애를 극복해야 한다.예를 들어, as Bintray is shutting down in May 2021 Maven Central 등록 프로세스를 처리하고 라이브러리를 게시하도록 구성해야 합니다.
이 글은 여러 플랫폼의 도서관 출판 프로그램을 완성하는 데 도움을 주고 한 가지 걱정을 덜어주며 도서관 자체에 전념할 수 있다🧘🏼‍♀️

계획


이 시리즈의 첫 번째 부분에서 우리는 다중 플랫폼 라이브러리를 만들 것이다. 이것은 expect/actual 메커니즘이 있는 플랫폼 API를 사용하여 사용자에게 간단한 API를 제공하고 세 가지 목표를 지원한다. 그것이 바로 본기(iOS 또는 호스트 목표, 당신의 선택에 달려 있다), JVM과 자바스크립트이다.이러한 라이브러리는 모든 KMM(Kotlin Multiplatform Mobile 또는 기타Kotlin Multiplatform 프로젝트에 사용할 수 있습니다.
게시할 항목이 이미 있으면 final step of this part로 바로 이동하여 라이브러리를 로컬 Maven 저장소에 게시하여 모든 내용이 정상적으로 작동하도록 할 수 있습니다.다음 부분에서, 우리는 다중 플랫폼 발표 형식을 이해하기 위해 이미 발표된 부품을 발견할 것이다.마지막으로, 이 시리즈의 마지막 부분에서, 우리는 Sonatype 계정을 등록할 것입니다. 이 계정은 라이브러리를 Maven Central에 발표하는 데 필요한 것입니다.
🤔 만약 당신이 우리가 사용하는 모든 새로운 마븐 용어에 대해 약간 곤혹스러움을 느낀다면, 그것은 괜찮습니다.다음은 유용한 트위터 힌트입니다. 도움이 될 수 있습니다!


사케트 나라얀
사키트

나처럼 마븐 용어에 곤혹스러워하는 모든 사람들에게 도움을 줄 수 있는 것들이 있다
2021년 2월 4일 오후 21:12
다음은 프로젝트를 발표하는 메커니즘을 설정합니다. 이로써 단일Gradle 작업을 호출해서 설정, 서명, 발표 라이브러리를 설정할 수 있습니다.마지막으로, 전 세계 개발자들이 사용할 수 있도록 Maven Central에 당신의 라이브러리를 발표할 것입니다!
할 일이 많으니 시작합시다!
ℹ️ 면책 성명: 본 강좌는 공식 문서와 기타 기존 문장을 바탕으로 한다.그것들은 모두 유용하고 최신 설명을 제공했지만, 출판 과정에서 험난한 길을 완전히 포괄하지는 않았다.여기서, 당신은 가장 관련된 기존 내용과 추가 정보의 조합을 찾을 것입니다. 이 정보는 당신의 모든 질문에 대답할 것입니다.

환경을 조성하다

  • 만약에 라이브러리에서 iOS나 맥OS 목표를 지원하기를 원한다면 맥OS로 본 기기의 부품을 구축해야 한다.그 외에 모든 운영체제에 라이브러리를 구축할 수 있습니다.
  • IntelliJ IDEAdownload the latest version herethe latest Kotlin plugin를 어떻게 사용하는지 보여 드리겠습니다Android Studio.IntelliJ IDEA에는 다중 플랫폼 라이브러리 마법사를 포함하여 유용한 Kotlin 마법사가 포함되어 있습니다.
  • 서명 라이브러리에 필요한 GPG 키를 만들기 위해 GPG 명령행 도구를 사용합니다.Download 수동으로 설치하거나 패키지 관리 유틸리티를 사용합니다. 예를 들어brew:brew install gpg
  • 자, 소개와 준비로 충분합니다. 시작합시다!

    다중 플랫폼 라이브러리 작성


    뭔가를 발표하려면 우리가 먼저 뭔가를 구축해야 한다!만약에 라이브러리가 하나도 없지만 발표 라이브러리의 실천 경험을 얻고 싶다면 먼저 예시 라이브러리following the official tutorial를 만듭니다. 이것은 처음부터 다중 플랫폼 라이브러리를 개발하는 과정을 설명합니다.
    이 강좌에서는 JVM, JS 및 네이티브 플랫폼에 대한 다중 플랫폼 라이브러리를 만들고 모든 플랫폼에 대한 일반적인 테스트를 작성하며 라이브러리를 로컬 Maven 저장소에 발표하는 방법을 배울 것입니다.라이브러리는 원본 데이터(문자열 및 바이트 배열)를 Base64 형식으로 변환합니다.서로 다른 플랫폼에서 Base64 형식으로 전환하기 위해, 당신은 JVM과 JS의 플랫폼 기능을 사용하고, 본 컴퓨터에 자신의 실현을 작성할 것입니다.

    iOS 대상 지원


    이 강좌는 호스트 목표와 같은 라이브러리를 구축하는 방법을 보여 줍니다. (따라서 MacOS에서 개발하면 생성된 이 라이브러리는 MacOS에서 실행하기에 적합합니다.)하지만 지원되는 타겟 세트는 쉽게 구성할 수 있습니다.예를 들어, 라이브러리가 KMM 프로젝트에 적합하도록 iOS 대상을 추가할 수 있습니다.다음과 같은 두 가지 방법이 있습니다.

  • 호스트 대상을 지원하지 않고 iOS만 필요한 경우 프로젝트 마법사가 생성한 호스트 종속 호스트의 네이티브 대상 선언을 ios() 대상 선언으로 교체할 수 있습니다.
    // Before
    kotlin {
        jvm {
           // …
        }
        js(IR) {
           // …
        }
        val hostOs = System.getProperty("os.name")
        val isMingwX64 = hostOs.startsWith("Windows")
        val nativeTarget = when {
            hostOs == "Mac OS X" -> macosX64("native")
            hostOs == "Linux" -> linuxX64("native")
            isMingwX64 -> mingwX64("native")
            else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
        }
    }
    
    // After
    kotlin {
        jvm {
          // …
        }
        js(IR) {
          // …
        }
        ios()
    }
    
    대상 이름(이 예에서 nativeMain->iosMain에 따라 원본 집합 성명과 폴더 이름을 바꾸는 것을 잊지 마십시오.
  • 호스트와 iOS 네이티브 타겟을 모두 지원하고 코드를 공유하려면 수동configure the hierarchical project structure이어야 합니다.
  • Android target 지원


    이 자습서는 목표 선언jvm()을 사용하여 JVM 플랫폼을 지원합니다.이로 인해 생성된 가공소재는 모든 JVM 플랫폼(Android 포함)에 대한 다중 플랫폼 프로젝트에 사용할 수 있습니다.Android 프로젝트에서 라이브러리를 직접 사용하거나 플랫폼에 특정한 기능(예를 들어 장치에 저장된 파일 사용)을 수행하려면 android()을 사용하십시오.작업을 수행하려면 android-libraryGradle 플러그인을 연결하고 androidbuild.gradle.kts 구성 블록에 안드로이드 특정 정보를 제공해야 합니다.
    android {
        compileSdkVersion($compileSdkVersion) 
     sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") // Create AndroidManifest.xml and provide path to it
        defaultConfig {
            minSdkVersion($minSDKVersiom)
            targetSdkVersion($targetSDKVersion)
        }
    }
    
    또한 안드로이드 대상에 변형 이름을 지정해야 합니다. 기본적으로 안드로이드 라이브러리의 작업 (see official docs for the details 이 발표되지 않기 때문입니다.
    kotlin {
        android {
            publishLibraryVariants("release", "debug")
        }
    }
    
    완료the Create and publish a multiplatform library tutorial 및 필요에 따라 목표를 구성합니다.다음은 JVM, JS 및 iOS를 지원하는 Base64 샘플 라이브러리의 소스 코드입니다.

    카트리나 페트로바 / mpp 샘플 라이브러리


    예제 Kotlin 멀티플랫폼 라이브러리(jvm+ios+js)


    이제 다음 단계로 넘어가서 라이브러리를 발표합니다!

    로컬 Maven 저장소에 라이브러리 게시

    The only difference from developing a regular multiplatform module is using the maven-publish Gradle plugin . maven-publish와 함께 사용할 경우 Kotlin 플러그인은 현재 호스트doc에 구축된 각 대상에 대해 자동으로 게시됩니다.maven-publish 플러그인에서 제공하는 해당하는Gradle 작업을 사용하여 이 발표를 원격 또는 로컬 저장소에 배치할 수 있습니다.
    발표할 코드가 있다면, 응용 maven-publish 을 하고 라이브러리 그룹과 버전 정보 see the last step of the tutorial 를 제공하기만 하면 됩니다.
    plugins {
        kotlin("multiplatform") version "1.4.31"
        id("maven-publish")
    }
    
    group = "org.jetbrains.base64"
    version = "1.0.0"
    
    실행 ./gradlew publishToMavenLocal 은 로컬 머신의 디렉터리인 로컬 Maven 저장소에 필요한 모든 작업을 업로드합니다.이 디렉터리에서 결과를 검사할 수 있습니다. 이 디렉터리는 보통 /Users/<user_name>/.m2 디렉터리에 있거나, 예시 멀티플랫폼 프로젝트 (예: KMM 프로젝트) 에 라이브러리를 연결해서 결과를 검사할 수 있습니다. 이 항목은 the KMM plugin for Android Studio 프로젝트 마법사를 통해 쉽게 만들 수 있습니다.공유 모듈build.gradle.kts에 로컬 게시 라이브러리에 대한 의존도를 추가하려면:
    repositories {
        mavenLocal() 
    }
    
    kotlin {
        android()
        ios ()
    
        sourceSets {
            val commonMain by getting {
                dependencies {
                  implementation("io.github.katerinapetrova:mpp-sample-lib:1.0.0")
                }
            }
        }
    }
    
    프로젝트 트리의 dependency 섹션을 통해 새로운 라이브러리 구조를 탐색하는 가장 좋은 방법은 다음과 같습니다.

    정말!😱 여기 물건이 많으니 궁금하실 거라는 거 알아요!그래서 공개하기 전에 도서관이 어떻게 구축되었는지 살펴보자. 이 시리즈의 다음 부분을 살펴보자.👀

    좋은 웹페이지 즐겨찾기