Fazer o upload da sua biblioteca

Para conceder acesso à sua biblioteca, escolha um repositório. Nesta página, você vai conferir as considerações relacionadas à escolha de um tipo de repositório e aprender a criar uma publicação usando o plug-in Maven Publish.

Antes de fazer upload, confira se você preparou a biblioteca para lançamento e configurou todas as variantes de publicação ou recursos de teste necessários.

Escolher um tipo de repositório

As bibliotecas são publicadas como arquivos AAR. Esses arquivos contêm o código compilado como bytecode e bibliotecas nativas, um manifesto do Android e recursos. O pacote não declara nenhuma identidade, versão ou dependência em outras bibliotecas.

Fornecer AARs por meio de um repositório geralmente é a prática recomendada, em vez de distribuir o AAR diretamente. Isso ajuda os usuários a entender melhor a origem da biblioteca, em vez de lidar com um arquivo name.aar sem detalhes importantes, como a versão. Ao fazer upgrade para uma versão mais recente de uma biblioteca, use um repositório para garantir que apenas as dependências necessárias sejam adicionadas para que os usuários não precisem atualizá-las manualmente.

Há vários benefícios no uso de um repositório para publicar a biblioteca:

  • O Gradle pode adicionar automaticamente as dependências da biblioteca ao gráfico de dependências.
  • O Gradle pode garantir que uma única versão da biblioteca esteja no gráfico de dependências, resolvendo conflitos caso a biblioteca seja incluída mais de uma vez com versões diferentes.
  • O Plug-in do Android para Gradle (AGP, na sigla em inglês) pode fazer uma simplificação mais eficiente se sua biblioteca usar recursos da linguagem Java 8 ou versões mais recentes, reduzindo o tempo de compilação para os usuários.
  • Sua biblioteca pode usar a publicação de variantes e incluir recursos como opções de teste.

A distribuição direta do AAR não fornece ao usuário informações sobre a identidade, versão ou dependência da biblioteca. Ao ser publicada em um repositório, a biblioteca é processada por um arquivo separado, parte do mecanismo de repositório. Em repositórios Maven, esse é o arquivo POM. Portanto, é altamente recomendável publicar bibliotecas usando repositórios em vez de distribuir os arquivos AAR manualmente.

Tipos de repositório

Há três tipos de repositório:

  • Com os repositórios on-line sem custo financeiro, como o Maven Central, qualquer pessoa pode fazer upload e download de bibliotecas.
  • Nos repositórios particulares com acesso via login, é possível controlar a distribuição de bibliotecas particulares.
  • Já os repositórios locais baseados em pasta permitem a distribuição de bibliotecas por download manual.

O uso de repositórios locais baseados em pasta é muito semelhante ao fornecimento do AAR por link de download manual ou e-mail. A principal diferença é que você não está enviando apenas o AAR, mas também as informações sobre identidade, versão e dependências.

Distribua um arquivo ZIP do repositório baseado em pasta que contém seu AAR e os metadados. Seus usuários podem extrair o conteúdo do arquivo, adicionar o conteúdo ao projeto e apontar o Gradle para ele. Desse momento em diante, os usuários podem declarar uma dependência na biblioteca usando coordenadas Maven, como se a biblioteca estivesse em um repositório on-line, e aproveitar todas as vantagens mencionadas anteriormente.

Criar a publicação

Publicar usando o plug-in Maven Publish do Gradle. O plug-in Maven Publish permite declarar publicações e repositórios e criar tarefas para publicá-las nos repositórios. Essas publicações consomem uma instância de SoftwareComponent criada pelo plug-in que gera o build, que pode ser o AGP ou o plug-in java-library.

Observe que, ao executar o plug-in Maven Publish com o AGP, os componentes do software não são criados diretamente após a aplicação. Em vez disso, eles são criados durante a etapa de callback afterEvaluate(). Portanto, a publicação que seleciona o componente do software também precisa ser configurada durante a etapa afterEvaluate().

O snippet de código a seguir do arquivo build.gradle no módulo cria uma publicação para uma determinada variante criada com singleVariant() ou 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"])
      }
    }
  }
}

No exemplo anterior, o nome do componente (components.release) é baseado no nome que foi dado a singleVariant() ou multipleVariants().

Após declarar uma publicação, crie um repositório de destino.

Publicar em um repositório local

A publicação em um repositório local é muito semelhante à publicação em um repositório remoto, exceto na declaração do repositório. Leia a seção anterior para aprender a publicar em um repositório remoto e criar uma publicação com as variantes desejadas. Em seguida, crie um repositório 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")
    }
  }
}

Isso cria uma tarefa chamada publishReleaseToMyRepoRepository, que consiste no nome da publicação e do repositório. Execute esta tarefa para gerar o repositório no local fornecido. Neste exemplo, o repositório é gerado dentro da pasta de build do projeto, em um diretório repo.

Se você quiser gerar automaticamente um arquivo ZIP do repositório, use o seguinte 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")
}

Esse código cria uma tarefa Zip chamada generateRepo, que consome o conteúdo da tarefa de publicação e a compacta, garantindo, ao mesmo tempo, que as entradas ZIP estejam em uma pasta de nível superior chamada mylibrary. A saída está localizada em build/distributions.