라이브러리 업로드

라이브러리에 액세스 권한을 부여하려면 저장소를 선택해야 합니다. 이 페이지에서는 저장소 유형 선택과 관련된 고려사항을 안내하고 Maven 게시 플러그인을 사용하여 게시를 만드는 방법을 보여줍니다.

라이브러리를 업로드하기 전에 출시용 라이브러리가 준비되고 필요한 게시 변형 또는 테스트 픽스처가 구성되었는지 확인해야 합니다.

저장소 유형 선택

라이브러리는 AAR 파일로 게시됩니다. 이러한 파일에는 바이트 코드 및 네이티브 라이브러리로 컴파일된 코드, Android 매니페스트, 리소스가 포함됩니다. 패키지 자체는 ID, 버전 또는 다른 라이브러리의 종속 항목을 선언하지 않습니다.

일반적으로 저장소를 통해 AAR을 제공하는 것이 AAR을 직접 배포하는 것보다 좋습니다. 이렇게 하면 버전과 같은 중요한 세부정보 없이 name.aar 파일을 처리하는 것보다 사용자가 라이브러리의 출처를 더 잘 파악할 수 있게 됩니다. 최신 버전의 라이브러리로 업그레이드할 때 저장소를 사용하여 최신 버전의 필수 종속 항목만 추가되도록 합니다. 그러면 사용자가 종속 항목을 수동으로 업데이트하지 않아도 됩니다.

저장소를 사용하여 라이브러리를 게시하면 다음과 같은 여러 이점이 있습니다.

  • Gradle은 라이브러리의 종속 항목을 종속 항목 그래프에 자동으로 추가할 수 있습니다.
  • Gradle은 라이브러리의 단일 버전이 종속 항목 그래프에 포함되도록 함으로써 라이브러리가 일시적으로 두 번 이상 다른 버전으로 포함되는 경우 충돌을 해결할 수 있습니다.
  • Android Gradle 플러그인(AGP)은 라이브러리가 자바 8 이상 언어 기능을 사용하는 경우 더 효율적으로 디슈가링을 실행할 수 있으므로 사용자의 빌드 시간이 단축됩니다.
  • 라이브러리는 변형 게시를 사용하고 테스트 픽스처와 같은 기능을 포함할 수 있습니다.

AAR을 직접 배포해도 라이브러리의 ID나 버전, 종속 항목과 관련된 정보는 사용자에게 제공되지 않습니다. 저장소에 게시할 때 게시 작업은 저장소 메커니즘의 일부인 별도의 파일에 의해 처리됩니다. Maven 저장소의 경우에는 POM 파일입니다. 따라서 AAR 파일을 수동으로 배포하는 대신 저장소를 사용하여 라이브러리를 게시하는 것이 훨씬 좋습니다.

저장소 유형

저장소에는 다음 세 가지 유형이 있습니다.

  • 무료 온라인 저장소(예: Maven Central): 누구나 라이브러리를 업로드하고 다운로드할 수 있습니다.
  • 비공개 저장소: 로그인을 통해 액세스할 수 있으며 비공개 라이브러리 배포를 제어할 수 있습니다.
  • 폴더 기반의 로컬 저장소: 수동 다운로드를 통해 라이브러리를 배포할 수 있습니다.

폴더 기반의 로컬 저장소를 사용하는 것은 사용자에게 AAR의 수동 다운로드 링크를 제공하거나 이메일로 AAR을 전송하는 것과 매우 비슷합니다. 주된 차이점은 AAR만 전송하는 것이 아니라 ID, 버전, 종속 항목에 관한 추가 정보도 전송한다는 점입니다.

AAR과 메타데이터를 포함하는 폴더 기반 저장소의 ZIP 파일을 배포합니다. 그러면 사용자가 파일의 콘텐츠를 추출하고 프로젝트에 콘텐츠를 추가하며 Gradle이 이를 가리키도록 할 수 있습니다. 그 뒤에는 마치 라이브러리가 온라인 저장소에 있는 것처럼 Maven 좌표를 사용하여 라이브러리의 종속 항목을 선언하고 앞에서 언급된 모든 이점을 누리면 됩니다.

게시 만들기

Gradle Maven 게시 플러그인을 사용하여 게시합니다. Maven 게시 플러그인을 사용하면 게시 및 저장소를 선언할 수 있고 이러한 게시를 저장소에 게시하는 작업을 만들 수 있습니다. 이러한 게시는 빌드를 구동하는 플러그인(AGP 또는 java-library 플러그인일 수 있음)에서 만든 SoftwareComponent 인스턴스를 사용합니다.

AGP로 Maven 게시 플러그인을 실행할 때 플러그인이 적용되었다고 해서 곧바로 소프트웨어 구성요소가 생성되는 것은 아닙니다. 대신 afterEvaluate() 콜백 단계 중에 생성됩니다. 따라서 소프트웨어 구성요소를 선택하는 게시 역시 afterEvaluate() 단계에서 구성되어야 합니다.

모듈 수준 build.gradle 파일의 다음 코드 스니펫은 singleVariant() 또는 multipleVariants()로 만든 지정된 변형의 게시를 생성합니다.

Groovy

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

위 예에서 구성요소(components.release)의 이름은 singleVariant() 또는 multipleVariants()에 지정된 이름을 기반으로 합니다.

게시를 선언한 후에는 타겟 저장소를 만들어야 합니다.

로컬 저장소에 게시

로컬 저장소에 게시하는 것은 저장소 선언을 제외하면 원격 저장소에 게시하는 것과 매우 비슷합니다. 이전 섹션을 읽고 원격 저장소에 게시하여 원하는 변형을 게시하는 게시를 만드는 방법을 알아보세요. 이어서 다음과 같이 로컬 저장소를 만듭니다.

Groovy

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = "${project.buildDir}/repo"
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri("${project.buildDir}/repo")
    }
  }
}

이렇게 하면 게시 이름과 저장소 이름으로 구성된 publishReleaseToMyRepoRepository라는 작업이 만들어집니다. 이 작업을 실행하여 제공된 위치에 저장소를 생성합니다. 이 예에서 저장소는 프로젝트의 빌드 폴더 내의 repo 디렉터리 아래에 생성됩니다.

저장소의 ZIP 파일을 자동으로 생성하려면 다음 코드를 사용하세요.

Groovy

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

이 코드는 generateRepo라는 Zip 작업을 만듭니다. 이 작업은 게시 작업의 내용물을 취하여 이를 zip 파일로 압축하고, 압축된 zip 항목이 mylibrary라는 최상위 폴더에 배치되도록 합니다. 출력된 버전은 build/distributions에 있습니다.