Carica la tua raccolta

Per concedere l'accesso alla tua libreria, devi scegliere un repository. Questa pagina ti guida attraverso le considerazioni relative alla scelta di un tipo di repository e mostra come creare una pubblicazione utilizzando il plug-in Maven Publish.

Prima di caricare la libreria, assicurati di averla preparata per il rilascio e di aver configurato le varianti di pubblicazione o le fixture di test necessarie.

Scegli un tipo di repository

Le librerie vengono pubblicate come file AAR. Questi file contengono il codice compilato come bytecode e librerie native, un manifest Android e risorse. Il pacchetto stesso non dichiara alcuna identità, versione o dipendenza da altre librerie.

In genere, la best practice consiste nel fornire gli AAR tramite un repository, anziché distribuirli direttamente. In questo modo, gli utenti possono comprendere meglio l'origine della libreria, anziché dover gestire un file name.aar senza dettagli importanti, come la versione. Quando esegui l'upgrade a una versione più recente di una libreria, utilizza un repository per assicurarti che vengano aggiunte solo le dipendenze richieste della versione più recente, in modo che gli utenti non debbano aggiornare manualmente le dipendenze.

L'utilizzo di un repository per pubblicare la libreria offre diversi vantaggi:

  • Gradle può aggiungere automaticamente le dipendenze della libreria al grafico delle dipendenze.
  • Gradle può garantire che nel grafico delle dipendenze sia presente una singola versione della tua libreria, risolvendo i conflitti se la libreria è inclusa in modo transitivo più di una volta con versioni diverse.
  • Il plug-in Android per Gradle (AGP) può eseguire il desugaring in modo più efficiente se la tua libreria utilizza le funzionalità del linguaggio Java 8 o versioni successive, riducendo i tempi di build per gli utenti.
  • La tua libreria può utilizzare la pubblicazione di varianti e includere funzionalità come le fixture di test.

La distribuzione diretta dell'AAR non fornisce all'utente alcuna informazione relativa all'identità, alla versione o alle dipendenze della tua libreria. Quando pubblichi in un repository, la distribuzione viene gestita da un file separato che fa parte del meccanismo del repository. Per i repository Maven, si tratta del file POM. Pertanto, ti consigliamo vivamente di pubblicare le librerie utilizzando i repository anziché distribuire manualmente i file AAR.

Tipi di repository

Esistono tre tipi di repository:

  • I repository online senza costi, come Maven Central, consentono a chiunque di caricare e scaricare librerie.
  • I repository privati, con accesso tramite login, consentono la distribuzione controllata di librerie private.
  • I repository locali basati su cartelle consentono la distribuzione delle librerie tramite download manuale.

L'utilizzo di repository locali basati su cartelle è molto simile a fornire agli utenti un link di download manuale all'AAR o a inviare l'AAR via email. La differenza principale è che non invii solo l'AAR, ma anche le informazioni aggiuntive su identità, versione e dipendenze.

Distribuisci un file ZIP del repository basato su cartelle contenente il tuo file AAR e i metadati. Gli utenti possono quindi estrarre i contenuti del file, aggiungerli al loro progetto e indirizzare Gradle verso di essi. Da quel momento in poi, gli utenti possono dichiarare una dipendenza dalla libreria utilizzando le coordinate Maven, come se la libreria si trovasse in un repository online, e usufruire di tutti i vantaggi menzionati in precedenza.

Crea la pubblicazione

Pubblica utilizzando il plug-in Gradle Maven Publish. Il plug-in Maven Publish ti consente di dichiarare pubblicazioni e repository e crea attività per pubblicare queste pubblicazioni nei repository. Queste pubblicazioni utilizzano un'istanza SoftwareComponent creata dal plug-in che gestisce la build, che potrebbe essere AGP o il plug-in java-library.

Tieni presente che, quando esegui il plug-in Maven Publish con AGP, i componenti software non vengono creati direttamente quando viene applicato il plug-in. Vengono invece creati durante il passaggio di callback afterEvaluate(). Pertanto, anche la pubblicazione che seleziona il componente software deve essere configurata durante il passaggio afterEvaluate().

Il seguente snippet di codice del file build.gradle a livello di modulo crea una pubblicazione per una determinata variante creata con singleVariant() o multipleVariants():

Alla moda

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

Nell'esempio precedente, il nome del componente (components.release) si basa sul nome assegnato a singleVariant() o multipleVariants().

Una volta dichiarata una pubblicazione, devi creare un repository di destinazione.

Pubblica in un repository locale

La pubblicazione in un repository locale è molto simile alla pubblicazione in un repository remoto, ad eccezione della dichiarazione del repository. Leggi la sezione precedente per scoprire come pubblicare in un repository remoto per creare una pubblicazione che pubblica la variante o le varianti scelte. Poi crea un repository locale:

Alla moda

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

Viene creata un'attività denominata publishReleaseToMyRepoRepository, che consiste nel nome della pubblicazione e nel nome del repository. Esegui questa attività per generare il repository nella posizione fornita. In questo esempio, il repository viene generato all'interno della cartella di build del progetto, in una directory repo.

Se vuoi generare automaticamente un file ZIP del repository, utilizza il seguente codice:

Alla moda

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

Questo codice crea un'attività Zip denominata generateRepo che utilizza i contenuti dell'attività di pubblicazione e li comprime, assicurando al contempo che le voci zip si trovino in una cartella di primo livello denominata mylibrary. L'output si trova in build/distributions.