[Android] Como criar sua primeira lib Android com Kotlin

Bibliotecas estão presentes de várias formas na vida de um desenvolvedor: organizar código, poupar escrita, testes, etc. Nesse tutorial vou ensinar a como criar uma simples biblioteca em Kotlin e como publicá-la no Jitpack.

Criaremos uma biblioteca que mostra um simples Toast, o intuito do tutorial é focar no conceito então iremos deixar a utilidade de lado :)

Todo o código fonte usado nesse tutorial está disponível aqui. ✨

Criando o projeto no Android Studio

Antes de tudo, crie um projeto novo com o nome de sua escolha. Criação do perojeto base

Com o build finalizado, vá em File > New > New Module…

Selecione a opção Android Library, adicione um nome e vá em Finish..

Criação do módulo

Após finalizar, a visualização do projeto estará da seguinte forma:

Visualização do projeto

Vale ressaltar que teremos 3 arquivos no buil.gradle:

  1. bulid.gradle (app)
  2. build.gradle (módulo do app)
  3. build.gradle (módulo da biblioteca)

Gradle Scripts

Com nosso módulo criado, podemos trabalhar em cima dele para desenvolvermos nossa lib. Para esse tutorial, criaremos uma lib que exibe um simples Toast.

Para isso é preciso uma classe com o nome AwesomeToast, com o seguinte código:

package com.iamageo.awesome_toast

import android.content.Context
import android.widget.Toast

fun showToast(context: Context?, message: String?) {
    Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}

Para realizar o teste, importamos a biblioteca direto no build.gradle do módulo do app.

Importando módulo da biblioteca

Após sincronizar, adicione a chamada da função showToast() a MainActivity.kt

package com.iamageo.sample_library

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.iamageo.awesome_toast.showToast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupToast()
    }

    private fun setupToast() {
        showToast(this, "its work")
    }

}

Ao rodar o projeto.. 🎉🎉🎉

Resultado da execução

Distribuição 🚀

Como citado anteriormente, usaremos o Jitpack para publicar nossa biblioteca. Porém, antes disso, precisaremos realizar alguns passos:

O primeiro passo é adicionarmos os artifacts no build.gradle do módulo da biblioteca (para simplificar, veja abaixo o commit com as alterações).

Todas as alterações no build.gradle podem ser vistas nesse commit. ✨

Basicamente, você deve prencher o group e o groupId com o seu Github, a version com a versão atual da sua versão da sua biblioteca e o artifactId com o nome de identificação da biblioteca (normalmente o mesmo nome do módulo criado, para o meu caso: awesome-toast)

Para saber mais sobre o build no Jitpack, leia a documentação

plugins {
    id 'maven-publish'
}

group = 'com.github.iamageo'
version = '1.0.0'

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = 'com.github.iamageo'
                artifactId = 'awesome-toast'
                version = '1.0.0'
            }
        }
    }
}

Feito isso, crie uma release no Github para a biblioteca.

Adicione uma tag, um título e uma descrição depois vá em Publish release.

Criação de release no Github

O ultimo passo é fazer login no Jitpack com a conta do Github e realizar a busca pelo repositório.

Após isso, vá em Get it e aguarde.. 🚧 Resultado do Jitpack

E assim, temos uma biblioteca publicada! 🚀🚀🚀 Finalização do build no Jitpack

Para incluir em seus projetos futuros, basta adicionar a seguinte linha no build.gradle do seu projeto e aproveitar!

dependencies {
    implementation'com.github.iamageo:sample_library:1.0.0'
}

Nossa, que conteúdo incrível!!

Eu estou desenvolvendo um aplicativo android com várias APIs muito específicas (como algumas que só foram lançadas nas últimas versões do android), e cara, eu fico impressionado com a liberdade que o Android nos dá para trabalharmos dentro do sistema, é realmente muito bom e por eu estar mexendo com essas APIs específicas, com certeza vou começar a criar umas libs seguindo estas dicas aí kskssks.