Загрузите свою библиотеку

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

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

Выберите тип репозитория

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

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

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

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

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

Типы репозиториев

Существует три типа репозиториев:

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

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

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

Создать публикацию

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

Обратите внимание, что при запуске подключаемого модуля публикации Maven с 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
      }
    }
  }
}

Котлин

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

Котлин

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

При этом создается задача под названием publish Release To MyRepo Repository , которая состоит из имени публикации и имени репозитория. Запустите эту задачу, чтобы создать репозиторий в указанном месте. В этом примере репозиторий создается внутри папки сборки проекта в каталоге repo .

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

классный

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

Котлин

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 .