Как загрузить библиотеку

Чтобы предоставить доступ к библиотеке, выберите хранилище. На этой странице рассказывается, как выбрать тип хранилища и создать публикацию с помощью плагина Maven Publish.

Прежде чем загружать библиотеку, убедитесь, что вы подготовили ее к выпуску и настроили все необходимые варианты публикации или тестовые фикстуры.

Выберите тип хранилища

Библиотеки публикуются в виде файлов AAR. Они содержат скомпилированный код в виде байт-кода и нативных библиотек, манифест Android и ресурсы. Сам пакет не содержит информации об идентификаторе, версии или зависимостях от других библиотек.

Как правило, лучше предоставлять AAR-файлы через хранилище, а не распространять их напрямую. Это помогает пользователям лучше понять, откуда взялась библиотека, а не иметь дело с файлом name.aar без важных деталей, таких как версия. При переходе на более новую версию библиотеки используйте репозиторий, чтобы добавлялись только необходимые зависимости новой версии. Тогда пользователям не придется обновлять зависимости вручную.

Публикация библиотеки в репозитории дает несколько преимуществ:

  • Gradle может автоматически добавлять зависимости библиотеки в граф зависимостей.
  • Gradle может гарантировать, что в графе зависимостей будет только одна версия вашей библиотеки, разрешая конфликты, если ваша библиотека транзитивно включена более одного раза с разными версиями.
  • Если в библиотеке используются функции языка Java 8 или более поздней версии, плагин Android Gradle (AGP) может выполнять десахаризацию эффективнее, сокращая время сборки для пользователей.
  • В библиотеке можно использовать публикацию вариантов и включать такие функции, как тестовые фикстуры.

Если вы распространяете AAR-файл напрямую, пользователь не получает никакой информации об идентификаторе, версии или зависимостях вашей библиотеки. При публикации в хранилище распространение выполняется с помощью отдельного файла, который является частью механизма хранилища. Для репозиториев Maven это файл POM. Поэтому мы настоятельно рекомендуем публиковать библиотеки с помощью репозиториев, а не распространять файлы AAR вручную.

Типы хранилищ

Существует три типа хранилищ:

  • Бесплатные онлайн-хранилища, такие как Maven Central, позволяют любому пользователю загружать и скачивать библиотеки.
  • Частные хранилища с доступом по логину позволяют контролировать распространение частных библиотек.
  • Локальные репозитории на основе папок позволяют распространять библиотеки путем скачивания вручную.

Использование локальных репозиториев на основе папок очень похоже на предоставление пользователям ссылки для скачивания AAR вручную или отправку AAR по электронной почте. Основное отличие заключается в том, что вы отправляете не только AAR, но и дополнительную информацию об идентификаторе, версии и зависимостях.

Вы распространяете ZIP-файл репозитория на основе папок, содержащий ваш AAR и метаданные. После этого пользователи смогут извлечь содержимое файла, добавить его в свой проект и указать на него Gradle. После этого пользователи смогут объявлять зависимость от библиотеки, используя координаты Maven, как если бы библиотека находилась в онлайн-хранилище, и пользоваться всеми преимуществами, упомянутыми ранее.

Создайте издание

Опубликуйте библиотеку с помощью плагина Gradle Maven Publish. Плагин Maven Publish позволяет объявлять публикации и репозитории, а также создавать задачи для публикации в репозиториях. Эти публикации используют экземпляр SoftwareComponent, созданный плагином, который управляет сборкой. Это может быть AGP или плагин java-library.

Обратите внимание, что при запуске плагина Maven Publish с AGP компоненты ПО не создаются напрямую при применении плагина. Вместо этого они создаются на этапе обратного вызова afterEvaluate(). Поэтому публикация, которая выбирает компонент программного обеспечения, также должна быть настроена на этапе afterEvaluate().

Приведенный ниже фрагмент кода файла build.gradle уровня модуля создает публикацию для заданного варианта, созданного с помощью singleVariant() или multipleVariants():

Яркий

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().

После объявления публикации необходимо создать целевое хранилище.

Публикация в локальном хранилище

Публикация в локальном хранилище очень похожа на публикацию в удаленном хранилище, за исключением объявления хранилища. В предыдущем разделе рассказывается, как опубликовать выбранные варианты в удаленном хранилище. Затем создайте локальное хранилище:

Яркий

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

Это создаст задачу с именем publishReleaseToMyRepoRepository, которая состоит из имени публикации и имени репозитория. Запустите эту задачу, чтобы создать хранилище в указанном месте. В этом примере хранилище создается в папке build проекта, в каталоге repo.

Если вы хотите автоматически создать ZIP-файл хранилища, используйте следующий код:

Яркий

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")
}

Этот код создает задачу Zip с названием generateRepo, которая использует контент задачи публикации и сжимает его, обеспечивая размещение записей ZIP в папке верхнего уровня с названием mylibrary. Выходные данные находятся в разделе build/distributions.