Android Libraries — Compartilhando sua criação

Evandro F. Souza
Training Center
Published in
6 min readJan 17, 2019

Independente da linguagem ou tecnologia utilizada, sempre fico impressionado com a quantidade de bibliotecas úteis que a comunidade produz. Há alguns dias, fiz um post explicando os benefícios de modularizar sua aplicação e também mostrei brevemente como criar uma biblioteca Android.

Neste post, continuarei neste assunto, mas dessa vez vou mostrar como compartilhar sua biblioteca Android com a comunidade.

De onde o Android Studio busca as bibliotecas?

Esta é uma questão simples, mas possivelmente desconhecida por muitos desenvolvedores, visto que o Android Studio abstrai grande parte do funcionamento do gerenciamento de pacotes e dependências.

Respondendo a pergunta: O Android Studio busca as bibliotecas dos repositórios (Maven Repository Server) configurados no arquivo build.gradle.

O Maven é uma ferramenta desenvolvida pelo Apache que fornece um servidor de arquivos para distribuir as bibliotecas.

Existem diversos servidores Maven, contudo, dois deles são considerados o padrão para as bibliotecas do Android, são eles:

1 — O JCenter é um repositório hospedado pela Bintray. Para utilizar ele no seu projeto, é necessário definir no arquivo build.gradle, como abaixo:

allprojects {
repositories {
jcenter()
}
}

2 — O Maven Central é um repositório hospedado pela Sonatype. Para utilizar ele no seu projeto, é necessário definir no arquivo build.gradle, como abaixo:

allprojects {
repositories {
mavenCentral()
}
}

Além desses dois repositórios padrões, também é possível criar e hospedar um repositório próprio. O Fabric.io do Twitter se enquadra neste caso, eles hospedaram seu próprio repositório Maven.

Mas qual a diferença entre o JCenter e o Maven Central?

Bom, o Maven Central foi o único repositório padrão por um certo tempo, tanto que antes os projetos criados no Android Studio só vinham com ele configurado. A partir de uma determinada versão do Android Studio, o JCenter foi adotado como o padrão. A comunidade ainda considera ambos como padrão devido à existência de diversos projetos legados que ainda estão dependentes do Maven Central. Para projetos novos o aconselhado é usar o JCenter.

Existem diversas razões pelas quais eles decidiram mudar do Maven Central para o JCenter. Aqui estão algumas das principais:

  • Ele entrega as bibliotecas através de um CDN, o que significa que o desenvolvedor pode aproveitar uma experiência de download mais rápida.
  • Ele é um superset do Maven Central. Isso que dizer que além de suas bibliotecas exclusivas, ele também contém tudo que está no Maven Central.
  • É simples e fácil de enviar nossa própria biblioteca para o repositório. Não há necessidade de assinar ou fazer qualquer coisa complexa, como é o caso no Maven Central.

Portanto, este artigo focará apenas no JCenter, já que uma vez que você carregue sua biblioteca com sucesso para lá, ela poderá ser encaminhada para o Maven Central facilmente depois disso.

Fazendo o upload da nossa biblioteca para o JCenter

Agora chega de conceitos e vamos fazer o upload de nossa biblioteca para o JCenter. Para fazer isso, vamos dividir em quatro partes distintas.

Parte 1: Criando pacote no Bintray

Em primeiro lugar. Vamos criar um pacote no Bintray. Para fazer isso, é preciso de uma conta e um repositório no Bintray. Abaixo os passos para isso:

Passo 1: Registrar uma conta no Bintray.com

Passo 2: Logo após o primeiro login, clique em “Add New Repository” e preencha como na figura abaixo:

Passo 3: Na próxima tela, clique em “Add New Package” e preencha as informações solicitadas conforme a sua biblioteca.

Embora não haja regra sobre o formato do nome do pacote, existe uma convenção. Basta deixar todas as letras minúsculas e separar cada palavra com um hífen (-).

Após clicar no botão “Create Package” o pacote está criado e preparado para receber a biblioteca.

Parte 2: Preparando o projeto

No post anterior desenvolvemos uma biblioteca, um visualizador de imagens em Android. Para enviar ela para o JCenter, precisamos antes fazer algumas configurações no Gradle.

Passo 1: No build.gradle do projeto, adicione dois plugins:

Abaixo um exemplo de como adicionar estes plugins:

plugins {
id "com.github.dcendents.android-maven" version "2.1"
id "com.jfrog.bintray" version "1.8.4"
}

Passo 2: Modifique o build.gradle do module para adicionar informações referentes ao repositório e pacote:

ext {
bintrayRepo = 'image-viewer'
bintrayName = 'image-viewer'
publishedGroupId = 'com.example.evandrosouza'
libraryName = 'ImageViewer'
artifact = 'image-viewer'
libraryDescription = 'A custom image viewer for Android' siteUrl = 'https://github.com/evandroferreiras/my-android-image-view'
gitUrl = 'https://github.com/evandroferreiras/my-android-image-view.git'
libraryVersion = '0.0.1' developerId = 'evandroferreiras'
developerName = 'Evandro Ferreira Souza'
developerEmail = 'evandroferreiras@gmail.com'
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}

Com as informações do exemplo acima, após publicado, todos poderão importar essa biblioteca colocando a seguinte linha no seu build.gradle:

implementation 'com.example.evandrosouza:image-viewer:0.0.1'

Passo 3: Modifique o arquivo local.properties e adicione as seguintes linhas (elas servirão para identificar o usuário do Bintray):

bintray.user=<seu Username>
bintray.apikey=<sua API Key>

Para extrair a apikey: clique no seu usuário, acesse “Edit profile” e depois “API Key”.

Passo 4: O passo final é aplicar os scripts que fazem uso dos plugins adicionados anteriormente. Para isso, adicione as linhas abaixo no final do build.gradle do module:

apply from: 'https://raw.githubusercontent.com/evandroferreiras/my-android-image-view/scripts/scripts/install.gradle'apply from: 'https://raw.githubusercontent.com/evandroferreiras/my-android-image-view/scripts/scripts/bintray.gradle'

Pronto! Agora o projeto está pronto para ser publicado no Bintray.

Parte 3: Fazendo o upload da biblioteca para o Bintray

Agora finalmente chegou o momento de fazer o upload de nossa biblioteca para o repositório no Bintray. Para fazer isso, vamos abrir um terminal e usar os seguinte comandos:

Atenção: o passos seguintes devem ser feitos de dentro do diretório da biblioteca.

Passo 1: Verifique a exatidão do código e faça o build dos arquivos da biblioteca (aar, pom, etc.). Digite o comando abaixo para fazer isso:

gradlew install

Se tudo ocorrer corretamente, deve mostrar algo como BUILD SUCCESSFUL.

Passo 2: Faça o upload para o Bintray. Digite o comando abaixo para fazer isso:

gradlew bintrayUpload

Se tudo ocorrer corretamente, deve mostrar algo como SUCCESSFUL.

Passo 3: Acesse a interface web de Bintray e veja a nova versão disponível.

Note que a biblioteca já está online, porém não disponível no JCenter ainda. Para usarmos ela da maneira que está agora, precisaremos adicionar o meu repositório. Como abaixo:

repositories {
google()
jcenter()
maven {
url 'https://dl.bintray.com/evandroferreiras/image-viewer/'
}
}

Concordemos que a maioria das vezes essa não é a melhor opção, não queremos obrigar os desenvolvedores a adicionar essa dependência somente por causa da nossa biblioteca. Agora vamos ver como enviar para o JCenter.

Parte 4: Enviando para o JCenter

Na verdade, essa parte é a mais simples de todas. Tudo é feito diretamente na interface web e deve ser configurado somente uma vez por pacote.

Passo 1: Acesse seu pacote, clique no botão “Actions” (canto superior direito da tela) e “Add to Jcenter”.

Passo 2: No popup que abrir, simplesmente clique em “Send”. Está ação enviará um pedido de sync que deve ser aprovado pelo Bintray. Assim que aprovado, você receberá um e-mail confirmando.

Parabéns! Agora a sua biblioteca está compartilhada com o mundo 😄.

E o que mais?

Neste post resolvi aprender (e explicar) diversos detalhes que sempre tive dúvidas como usuário de bibliotecas (por exemplo, a relação entre JCenter e Maven Central). Note que apesar de o texto abordar como compartilhar uma biblioteca com a comunidade open-source, também é possível aplicar este conhecimento na sua empresa, compartilhando bibliotecas em repositórios privados (disponibilizados na versão paga do Bintray e outros providers).

Caso você tenha gostado do conteúdo, deixo aqui mais materiais de estudo:

Se quiser trocar uma ideia ou entrar em contato comigo, pode me achar no Twitter(@e_ferreirasouza) ou Linkedin.

Grande abraço e até a próxima!

--

--