Cómo subir tu biblioteca

Para otorgar acceso a tu biblioteca, debes elegir un repositorio. En esta página, se explican las consideraciones relacionadas con la elección de un tipo de repositorio y se muestra cómo crear una publicación con el complemento de Maven Publish.

Antes de su carga, asegúrate de haber preparado la biblioteca para el lanzamiento y configurado las variantes de publicación o los dispositivos de prueba necesarios.

Cómo elegir un tipo de repositorio

Las bibliotecas se publican como archivos AAR. Estos archivos contienen código compilado como código de bytes y bibliotecas nativas, un manifiesto de Android y recursos. El paquete en sí no declara ninguna identidad, versión ni dependencia de otras bibliotecas.

Por lo general, se recomienda proporcionar AAR mediante un repositorio, en lugar de distribuirlos directamente. Esto ayuda a los usuarios a comprender mejor de dónde proviene la biblioteca (en lugar de tener que lidiar con un archivo name.aar sin detalles importantes, como la versión). Cuando actualizas a una versión más reciente de una biblioteca, el uso de un repositorio ayuda a garantizar que solo se agreguen las dependencias necesarias de la versión más reciente, de modo que los usuarios no tengan que actualizar las dependencias de forma manual.

Si usas un repositorio para publicar tu biblioteca, puedes obtener beneficios como los siguientes:

  • Gradle puede agregar automáticamente las dependencias de tu biblioteca al gráfico de dependencias.
  • Gradle puede garantizar que una sola versión de tu biblioteca esté en el gráfico de dependencias, lo que resuelve conflictos si esta se incluye de forma transitiva más de una vez con diferentes versiones.
  • El complemento de Android para Gradle (AGP) puede realizar una expansión de sintaxis más eficiente si tu biblioteca usa Java 8 funciones del lenguaje posteriores, lo que reduce los tiempos de compilación para los usuarios.
  • Tu biblioteca puede usar la publicación de variantes y, además, incluir funciones como los dispositivos de prueba.

La distribución directa de los archivos AAR no proporciona a tu usuario ninguna información sobre la identidad, versión o dependencias de tu biblioteca. Cuando publicas en un repositorio, la distribución se controla mediante un archivo separado que forma parte del mecanismo del repositorio. Para los repositorios de Maven, este es el archivo POM. Por lo tanto, te recomendamos publicar bibliotecas con repositorios en lugar de distribuir de forma manual los archivos AAR.

Tipos de repositorios

Existen los siguientes tres tipos de repositorios:

  • Los repositorios en línea y gratuitos, como Maven Central, permiten que cualquier persona suba y descargue bibliotecas.
  • Los repositorios privados permiten la distribución controlada de las bibliotecas privadas a través del acceso.
  • Los repositorios locales basados en carpetas permiten la distribución de bibliotecas mediante una descarga manual.

El uso de repositorios locales basados en carpetas es muy similar a proporcionar a los usuarios un vínculo de descarga manual para el AAR o el envío de este por correo electrónico. La diferencia principal es que no se envía solo el AAR, sino también información adicional sobre identidad, versión y dependencias.

Lo que distribuyes es un archivo ZIP del repositorio basado en carpetas que contiene los archivos AAR, además de los metadatos. Los usuarios pueden extraer el contenido del archivo, agregarlo a su proyecto y apuntar Gradle a él. A partir de ese momento, pueden declarar una dependencia en la biblioteca mediante las coordenadas de Maven, como si la biblioteca estuviera en un repositorio en línea, y aprovechar todas las ventajas mencionadas antes.

Cómo crear la publicación

Publica mediante el complemento de Maven Publish para Gradle. El complemento de Maven Publish te permite declarar publicaciones y repositorios, y crea tareas para publicarlas en los repositorios. Estas publicaciones consumen una instancia de SoftwareComponent creada por el complemento que controla la compilación, que podría ser AGP o el complemento java-library.

Ten en cuenta que cuando ejecutas el complemento de Maven Publish con AGP, los componentes de software no se crean de forma directa si se aplica el complemento. En cambio, se crean durante el paso de devolución de llamada afterEvaluate(). Por lo tanto, la publicación que selecciona el componente de software también debe configurarse durante el paso de afterEvaluate().

El siguiente fragmento de código del archivo build.gradle a nivel de módulo crea una publicación para una variante determinada creada con singleVariant() o 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"])
      }
    }
  }
}

En el ejemplo anterior, el nombre del componente (components.release) se basa en el nombre que se le dio a singleVariant() o multipleVariants().

Una vez que declares una publicación, debes crear un repositorio de destino.

Cómo publicar en un repositorio local

Publicar en un repositorio local es muy similar a hacerlo en uno remoto, excepto por su declaración. Lee la sección anterior para aprender sobre la publicación en un repositorio remoto para crear una que publique las variantes deseadas. Luego, crea un repositorio local:

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

Esto crea una tarea llamada publishReleaseToMyRepoRepository, que se compone del nombre de la publicación y el nombre del repositorio. Ejecuta esta tarea para generar el repositorio en la ubicación proporcionada. En este ejemplo, el repositorio se genera dentro de la carpeta de compilación del proyecto, en un directorio repo.

Si deseas generar automáticamente un archivo ZIP del repositorio, hazlo con el siguiente código:

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

Este código crea una tarea Zip, llamada generateRepo, que consume el contenido de la tarea de publicación y la comprime al tiempo que garantiza que las entradas ZIP estén en una carpeta de nivel superior llamada mylibrary. El resultado se encuentra en build/distributions.