Prześlij swoją bibliotekę

Aby przyznać dostęp do biblioteki, musisz wybrać repozytorium. Na tej stronie znajdziesz informacje o tym, co należy wziąć pod uwagę przy wyborze typu repozytorium, oraz dowiesz się, jak utworzyć publikację za pomocą wtyczki Maven Publish.

Przed przesłaniem biblioteki upewnij się, że została ona przygotowana do opublikowania i że skonfigurowano wszystkie niezbędne warianty publikacji lub testowe elementy.

Wybierz typ repozytorium

Biblioteki są publikowane jako pliki AAR. Te pliki zawierają skompilowany kod w postaci kodu bajtowego i bibliotek natywnych, plik manifestu Androida oraz zasoby. Sam pakiet nie deklaruje żadnej tożsamości, wersji ani zależności od innych bibliotek.

Zasadniczo sprawdzoną metodą jest udostępnianie plików AAR przez repozytorium, a nie bezpośrednio. Dzięki temu użytkownicy mogą lepiej zrozumieć, skąd pochodzi biblioteka, zamiast korzystać z pliku name.aar bez ważnych szczegółów, takich jak wersja. Podczas uaktualniania biblioteki do nowszej wersji użyj repozytorium, aby mieć pewność, że zostaną dodane tylko wymagane zależności nowszej wersji i użytkownicy nie będą musieli ręcznie aktualizować zależności.

Używanie repozytorium do publikowania biblioteki ma wiele zalet:

  • Gradle może automatycznie dodawać zależności biblioteki do wykresu zależności.
  • Gradle może zapewnić, że w grafie zależności będzie tylko jedna wersja biblioteki, rozwiązując konflikty, jeśli biblioteka jest przejściowo uwzględniona więcej niż raz w różnych wersjach.
  • Wtyczka Androida do obsługi Gradle (AGP) może przeprowadzać bardziej wydajne odlukrzanie, jeśli biblioteka używa funkcji języka Java 8 lub nowszego, co skraca czas kompilacji dla użytkowników.
  • Biblioteka może korzystać z publikowania wariantów i zawierać funkcje takie jak testowe elementy stałe.

Bezpośrednia dystrybucja pliku AAR nie dostarcza użytkownikowi żadnych informacji o tożsamości, wersji ani zależnościach biblioteki. Podczas publikowania w repozytorium dystrybucja jest obsługiwana przez oddzielny plik, który jest częścią mechanizmu repozytorium. W przypadku repozytoriów Maven jest to plik POM. Dlatego zdecydowanie zalecamy publikowanie bibliotek za pomocą repozytoriów, a nie ręczne rozpowszechnianie plików AAR.

Typy repozytoriów

Istnieją 3 typy repozytoriów:

  • Bezpłatne repozytoria online, takie jak Maven Central, umożliwiają każdemu przesyłanie i pobieranie bibliotek.
  • Prywatne repozytoria z dostępem po zalogowaniu umożliwiają kontrolowaną dystrybucję prywatnych bibliotek.
  • Lokalne repozytoria oparte na folderach umożliwiają dystrybucję bibliotek przez ręczne pobieranie.

Korzystanie z lokalnych repozytoriów opartych na folderach jest bardzo podobne do udostępniania użytkownikom linku pobierania pliku AAR lub wysyłania pliku AAR e-mailem. Główna różnica polega na tym, że nie wysyłasz tylko pliku AAR, ale też dodatkowe informacje o tożsamości, wersji i zależnościach.

Rozpowszechniasz plik ZIP repozytorium opartego na folderach, który zawiera plik AAR i metadane. Użytkownicy mogą następnie wyodrębnić zawartość pliku, dodać ją do projektu i skierować do niej Gradle. Od tego momentu użytkownicy mogą deklarować zależność od biblioteki za pomocą współrzędnych Maven, tak jakby biblioteka znajdowała się w repozytorium online, i korzystać ze wszystkich wspomnianych wcześniej zalet.

Tworzenie publikacji

Opublikuj za pomocą wtyczki Gradle Maven Publish. Wtyczka Maven Publish umożliwia deklarowanie publikacji i repozytoriów oraz tworzy zadania do publikowania tych publikacji w repozytoriach. Te publikacje wykorzystują instancję SoftwareComponent utworzoną przez wtyczkę, która steruje kompilacją. Może to być AGP lub wtyczka java-library.

Pamiętaj, że podczas uruchamiania wtyczki Maven Publish z AGP komponenty oprogramowania nie są tworzone bezpośrednio po zastosowaniu wtyczki. Są one tworzone podczas kroku wywołania zwrotnego afterEvaluate(). Dlatego publikacja, która wybiera komponent oprogramowania, musi być również skonfigurowana podczas kroku afterEvaluate().

Ten fragment kodu pliku build.gradle na poziomie modułu tworzy publikację dla danego wariantu utworzonego za pomocą singleVariant() lub multipleVariants():

Dynamiczny

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

W poprzednim przykładzie nazwa komponentu (components.release) jest oparta na nazwie nadanej elementowi singleVariant() lub multipleVariants().

Po zadeklarowaniu publikacji musisz utworzyć repozytorium docelowe.

Publikowanie w lokalnym repozytorium

Publikowanie w lokalnym repozytorium jest bardzo podobne do publikowania w zdalnym repozytorium, z wyjątkiem deklaracji repozytorium. Przeczytaj poprzednią sekcję, aby dowiedzieć się, jak opublikować w zdalnym repozytorium, aby utworzyć publikację, która publikuje wybrane warianty. Następnie utwórz lokalne repozytorium:

Dynamiczny

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

Spowoduje to utworzenie zadania o nazwie publishReleaseToMyRepoRepository, która składa się z nazwy publikacji i nazwy repozytorium. Uruchom to zadanie, aby wygenerować repozytorium w podanej lokalizacji. W tym przykładzie repozytorium jest generowane w folderze kompilacji projektu, w katalogu repo.

Jeśli chcesz automatycznie wygenerować plik ZIP repozytorium, użyj tego kodu:

Dynamiczny

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

Ten kod tworzy zadanie Zip o nazwie generateRepo, które wykorzystuje zawartość zadania publikowania i kompresuje ją, zapewniając, że wpisy zip znajdują się w folderze najwyższego poziomu o nazwie mylibrary. Dane wyjściowe znajdują się w sekcji build/distributions.