No mundo do desenvolvimento Android, enfrentamos um fluxo contínuo de novidades: novos dispositivos, atualizações do SDK e uma variedade de bibliotecas e ferramentas que são lançadas todos os dias.
Junte a isso as constantes alterações, depreciações e a pressão do negócio para entregar funcionalidades que atendam às necessidades dos clientes. Este cenário volátil torna-se um desafio para manter nosso código organizado, eficiente e escalável.
Nesta série de artigos, guiarei vocês através do processo de criação de uma Plataforma Android.
O que é uma plataforma?
Ao escalar um projeto Android, encontramos desafios como modularização e gestão de dependências. A necessidade de performance, otimização, consistência UI/UX e garantir a retrocompatibilidade também se tornam cada vez mais urgentes.
Uma "plataforma" é um conjunto coeso e bem definido de práticas, ferramentas e bibliotecas que agilizam o desenvolvimento.
Ela se destaca como uma solução robusta e escalável para enfrentar os desafios inerentes ao desenvolvimento Android, auxiliando em aspectos como modularização, otimização, integração contínua, testes e segurança.
Construindo uma Plataforma no Android
No decorrer desses artigos, iremos construir uma plataforma desde o início, acoplando-a a um projeto já existente.
🔗 github.com/rsicarelli/kotlin-gradle-android-platform
- Modularização
- Exploraremos as razões e ideias por trás da modularização no Android.
- Início do Projeto
- Apresentaremos o projeto base que será evoluído e integrado com nossa plataforma.
- Compartilhando scripts do Gradle
- Abordaremos o
buildSrc
e discutiremos como compartilhar scripts em projetos Gradle.
- Abordaremos o
- Composite Build
- Introduziremos essa valiosa feature do Gradle e criaremos um composite build para representar nossa plataforma.
- Simplificando Gradle Init
- Abordaremos, com mais contexto, as funcionalidades realmente necessárias para nossa plataforma.
- Version Catalog
- Introduziremos e implementaremos o catálogo de versões do Gradle.
- Decorando o módulo 'app'
- Introduziremos o conceito de "decorações" e delegaremos os scripts Gradle do
app
para nossa plataforma.
- Introduziremos o conceito de "decorações" e delegaremos os scripts Gradle do
- Decorando os módulos 'library'
- Prosseguiremos para nossas libraries e também delegaremos a lógica para nossa plataforma.
- Unificando a Application e Library extensions com a Common Extension
- Discutiremos sobre
ApplicationExtension
,LibraryExtension
eCommonsExtension
do Android Gradle Plugin (AGP).
- Discutiremos sobre
- Customização dos módulos
- Parametrizaremos nossa plataforma, possibilitando customizações nos módulos que a utilizam.
- Criando uma DSL para customizar as novas opções
- Implementaremos uma forma idiomática em Kotlin para realizar nossas customizações com a plataforma.
- Otimizando tempo de compilação para bibliotecas Android
- Discutiremos sobre as
BuildFeatures
do Android Gradle Plugin e otimizaremos a compilação de bibliotecas Android.
- Discutiremos sobre as
- Incluindo módulos "puro JVM"
- Exploraremos os motivos para ter módulos mais "enxutos" e evitar etapas extras do Android Gradle Plugin.
- Aderindo a funcionalidades experimentais do compilador do Kotlin
- Discutiremos sobre a anotação
@RequiresOptIn
e como adaptar nossa plataforma para aderir a funcionalidades experimentais.
- Discutiremos sobre a anotação
- Cuidando do código com Detekt, Klint e Spotless
- Focaremos na qualidade de código, utilizando nossa plataforma para adaptar nosso projeto com ferramentas de análise e formatação de código.
- Considerações finais
- Refletiremos sobre a real necessidade de uma plataforma, boas práticas e os próximos passos para futuras séries!
Spoiler do que iremos aprender
Iremos constrúir algumas decorações para serem aplicadas em nossos build.gradle.kts
:
- Declarando um módulo
app
através da funçãoandroidApp()
- Declarando módulos
library
através da funçãoandroidLibrary()
- Declarando módulos puramente JVM através da função
jvmLibrary()
- Integração com
detekt
espotless
como ferramentas de qulidade de código.
import com.rsicarelli.kplatform.detekt import com.rsicarelli.kplatform.spotless plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.arturbosch.detekt) apply false alias(libs.plugins.diffplug.spotless) apply false id(libs.plugins.rsicarelli.kplatform.get().pluginId) } detekt() spotless()
import com.rsicarelli.kplatform.androidApp plugins { id(libs.plugins.android.application.get().pluginId) kotlin("android") } androidApp { versionCode = 1 versionName = "1.0.0" } dependencies { implementation(libs.androidx.activity.compose) implementation(projects.core.designsystem) implementation(projects.features.home) }
import com.rsicarelli.kplatform.androidLibrary plugins { id(libs.plugins.android.library.get().pluginId) kotlin("android") } androidLibrary() dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) }
import com.rsicarelli.kplatform.jvmLibrary plugins { kotlin("jvm") } jvmLibrary() dependencies { implementation(libs.kotlinx.coroutines.core) }
Bons estudos!
Espero que desfrute desse conteúdo e possa aprender bastante!
Se tiver qualquer dúvida ou problema, não hesite em me contatar, ou deixar um comentário.
Comece por aqui: Parte 1: Modularização
Top comments (0)