Artigo original: Parte 0: Introdução a série
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.
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.
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
- Exploraremos as razões e ideias por trás da modularização no Android.
- Apresentaremos o projeto base que será evoluído e integrado com nossa plataforma.
- Abordaremos o
buildSrc
e discutiremos como compartilhar scripts em projetos Gradle.
- Introduziremos essa valiosa feature do Gradle e criaremos um composite build para representar nossa plataforma.
- Abordaremos, com mais contexto, as funcionalidades realmente necessárias para nossa plataforma.
- Introduziremos e implementaremos o catálogo de versões do Gradle.
- Introduziremos o conceito de "decorações" e delegaremos os scripts Gradle do
app
para nossa plataforma.
- Prosseguiremos para nossas libraries e também delegaremos a lógica para nossa plataforma.
- Discutiremos sobre
ApplicationExtension
,LibraryExtension
eCommonsExtension
do Android Gradle Plugin (AGP).
- Parametrizaremos nossa plataforma, possibilitando customizações nos módulos que a utilizam.
- Implementaremos uma forma idiomática em Kotlin para realizar nossas customizações com a plataforma.
- Discutiremos sobre as
BuildFeatures
do Android Gradle Plugin e otimizaremos a compilação de bibliotecas Android.
- Exploraremos os motivos para ter módulos mais "enxutos" e evitar etapas extras do Android Gradle Plugin.
- Discutiremos sobre a anotação
@RequiresOptIn
e como adaptar nossa plataforma para aderir a funcionalidades experimentais.
- Focaremos na qualidade de código, utilizando nossa plataforma para adaptar nosso projeto com ferramentas de análise e formatação de código.
- Refletiremos sobre a real necessidade de uma plataforma, boas práticas e os próximos passos para futuras séries!
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)
}
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
Copyright 2023 Rodrigo Sicarelli
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.