Just ended to configure all gradle files for a project. It’s is just a sharing if anyone want to point me a way less stupid more sophisticated to make it.
gradle.properties
####################################################################################################
#
# Configurações do Gradle
#
# permite o cache de dados de build do Gradle
org.gradle.caching=true
# desabilita o reporte detalhado do cache de build em debug
org.gradle.caching.debug=false
# permite o armazenamento em cache de dados da configuração do Gradle
org.gradle.configuration-cache=true
# configura apenas projetos relacionados às tarefas em execução
org.gradle.configureondemand
# define como os textos produzidos pelo Gradle serão expostos no console
org.gradle.console=auto
# máximo tempo de espera dos daemons 3h
org.gradle.daemon.idletimeout=10800000
# usa daemon
org.gradle.daemon=true
# reduz o log do daemon
org.gradle.daemon.performance.disable-logging=true
# configura o jvm para os daemons
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.jvmargs.2=-XX:+UseParallelGC -Dfile.encoding=UTF-8
# permite o paralelismo, pelo Gradle
org.gradle.parallel=true
# complemento para avisos de build
org.gradle.warning.mode=all
####################################################################################################
#
# Configurações da aplicação
#
# migra bibliotecas dependêntes para sua versão AndroidX
# android.enableJetifier=true
# otimização agressiva do Android Gradle Plugin
android.enableR8.fullMode=true
# acelera a compilação quando lida com @OnLifecycleEvent
android.lifecycleProcessor.incremental=true
# permite o uso das bibliotecas do AndroidX
android.useAndroidX=true
# controla o R8 para não remover código necessário
android.useMinimalKeepRules=true
####################################################################################################
#
# Configurações do projeto (Desacoplamento de Strings)
#
buildlogicName=build-logic
namespaceApp=com.logger.app
namespaceAppTeste=com.loggerTest.app
namespaceList=com.logger.list
namespaceUtilities=com.logger.utilities
palavraLibs=libs
proguardAndroid=proguard-android-optimize.txt
proguardRules=proguard-rules.pro
projectName=Logger
recursosMain=src/main/resources
recursosTest=src/test/resources
subprojectApp=:app
subprojectList=:list
subprojectUtil=:utilities
versionsToml=../gradle/libs.versions.toml
####################################################################################################
libs.versions.toml
[versions] # versão a ser usada de cada biblioteca ou plugin seguida pela fonte de origem
# versões de plugins e biblioteccas
# https://maven.google.com/web/index.html?#com.android.settings:com.android.settings.gradle.plugin
androidGradlePlugin = "8.9.0" # https://mvnrepository.com/artifact/com.android.tools.build/gradle
adrxActivity = "1.10.1" # https://mvnrepository.com/artifact/androidx.activity/activity
adrxAppcompat = "1.7.0" # https://mvnrepository.com/artifact/androidx.appcompat/appcompat
consLt = "2.2.1" # https://mvnrepository.com/artifact/androidx.constraintlayout/constraintlayout
xprssCore = "3.6.1" # https://mvnrepository.com/artifact/androidx.test.espresso/espresso-core
material = "1.12.0" # https://mvnrepository.com/artifact/com.google.android.material/material
testng = "7.11.0" # https://mvnrepository.com/artifact/org.testng/testng
# outras versões
javaSource = "21"
javaTarget = "21"
versaoNome = "1.00.00.000" # string - nome livre (v1.v2.semana.mudança)
versaoNumero = "1" # inteiro - pro google play store
sdkCompile = "35" # https://developer.android.com/guide/topics/manifest/uses-sdk-element
sdkMin = "26" # https://developer.android.com/guide/topics/manifest/uses-sdk-element
sdkTarget = "35" # https://developer.android.com/guide/topics/manifest/uses-sdk-element
[libraries] # declaração dos nomes das bibliotecas
adrxActivity = { group = "androidx.activity", name = "activity", version.ref = "adrxActivity" }
adrxAppcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "adrxAppcompat" }
consLt = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "consLt" }
xprssCore = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "xprssCore" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
testng = { group = "org.testng", name = "testng", version.ref = "testng" }
[plugins] # declaração dos plugins
androidApplication = { id = "com.android.application", version.ref = "androidGradlePlugin" }
androidLibrary = { id = "com.android.library", version.ref = "androidGradlePlugin" }
buildLogicAndroidApplication = { id = "build-logic.android-app" }
buildLogicAndroidGeral = { id = "build-logic.android-geral" }
buildLogicAndroidLibrary = { id = "build-logic.android-bib" } // it is just buildLogicAndroidGeral
groovyGradle = { id = "groovy-gradle-plugin" }
root settings.gradle
// Administração de dependências
pluginManagement {
includeBuild(buildlogicName) // dependência para lógica de build
// Aonde buscar para cumprir as dependências
repositories {
google() // repositório oficial do google
mavenCentral() // dependências de java e android
gradlePluginPortal() // repositório oficial do gradle
}
}
// Resolução de dependências
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) // força a declaração no settings
// Aonde buscar para cumprir as dependências
repositories {
google() // repositório oficial do google
mavenCentral() // dependências de java e android
gradlePluginPortal() // repositório oficial do gradle
}
}
rootProject.name = projectName // nome da pasta do projeto - pasta raiz
include(subprojectApp, subprojectList, subprojectUtil) // nome da pasta do código do app
.\app\build.gradle
// Declaração dos plugins da app
plugins {
alias libs.plugins.androidApplication // plugin oficial para aplicações Android
alias libs.plugins.buildLogicAndroidApplication // plugin para configurações gerais do app
}
// Definição das características do aplicativo
android {
namespace = project.properties.namespaceApp // identificador para o pacote do aplicativo
testNamespace = project.properties.namespaceAppTeste // identificador para testes do aplicativo
}
// Biblioteras para serem usadas no código
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) // inclui jars como dependências
implementation project(project.properties.subprojectUtil) // projetos sem acesso às dependências
}
.\utilities\build.gradle
// Declaração dos plugins do utilities
plugins {
alias libs.plugins.androidLibrary // necessario para fazer uma biblioteca Android
alias libs.plugins.buildLogicAndroidLibrary // plugin para configurações gerais da biblioteca
}
// Definição das características do aplicativo
android {
namespace = project.properties.namespaceUtilities // identificador para o pacote do aplicativo
}
// Biblioteras para serem usadas no código
dependencies {
api project(project.properties.subprojectList) // api pega dados e compartilha
}
./build-logic/settings.gradle
// Busca e define o lisb.versions.toml como libs e usa como catálogo de versão
final Properties propriedadesRaiz = new Properties()
rootProject.projectDir.parentFile.listFiles().any { final file ->
if (file.isFile()) {
propriedadesRaiz.load(new FileInputStream(file))
if (propriedadesRaiz.buildlogicName != null) {
return true
}
}
}
// Resolução de dependências
dependencyResolutionManagement {
// Acesso ao libs.versions.toml
versionCatalogs {
create(propriedadesRaiz.palavraLibs) {
from(files(propriedadesRaiz.versionsToml)) // Direct path
}
}
}
rootProject.name = propriedadesRaiz.buildlogicName // nome da pasta do projeto
./build-logic/build.gradle
plugins {
alias libs.plugins.groovyGradle
}
./build-logic/src/main/groovy/build-logic.android-geral.gradle
// Definição das características do aplicativo
android {
// Configurações padrão para o aplicativo Android
defaultConfig {
compileSdk = libs.versions.sdkCompile.get().toInteger() // compatibilidade APIs do Android
minSdk = libs.versions.sdkMin.get().toInteger() // versão Android mínima
targetSdk = libs.versions.sdkTarget.get().toInteger() // versão Android principal
}
// Versão java para compilar o código e manter a compatibilidade
compileOptions {
sourceCompatibility = JavaVersion.toVersion(libs.versions.javaSource.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.javaTarget.get())
}
// Define o local do código para o android
sourceSets {
// Código principal, androidx usa res, mas o gradle cria resources
main {
// Recursos do código
res.srcDirs = [project.properties.recursosMain]
}
// Códigos de teste
test {
// Recursos dod códigos de teste, androidx usa res, mas o gradle cria resoures
res.srcDirs = [project.properties.recursosTest]
}
}
}
// Biblioteras para serem usadas no código
dependencies {
implementation(libs.adrxActivity) // base para fazer Activities
implementation(libs.adrxAppcompat) // compatibilidade com versões antigas
testImplementation(libs.testng) // framework do TestNG
}
// Aplica tipo de test TestNG
tasks.withType(Test).configureEach {
useTestNG() // aplica o TestNG
}
./build-logic/src/main/groovy/build-logic.android-app.gradle
// Declaração dos plugins da app
plugins.apply(libs.plugins.buildLogicAndroidGeral.get().getPluginId())
// Definição das características do aplicativo
android {
// Configurações padrão para o aplicativo Android
defaultConfig {
applicationId project.properties.namespaceApp // identificador na Google Play Store
versionCode libs.versions.versaoNumero.get().toInteger() // versão do para Google Play Store
versionName libs.versions.versaoNome.get() // nome da versão do código exibido aos usuários
}
// Controle sobre compilaação
buildFeatures{
buildConfig = false
}
// Controle de builds para o aplicativo
buildTypes {
// Regras para a release do aplicativo
release {
minifyEnabled = false
proguardFiles getDefaultProguardFile(
project.properties.proguardAndroid), project.properties.proguardRules
}
// Regras para a debug do aplicativo
debug {
minifyEnabled = false // desabilita o encolhimento de código
}
}
// Ativa a view binding para melhorar as views do aplicativo
viewBinding {
enable = true
}
}
// Biblioteras para serem usadas no código
dependencies {
androidTestImplementation(libs.xprssCore) // framework do Andoird para testes
androidTestImplementation(libs.testng) // framework do TestNG permitido para android
implementation(libs.consLt) // layouts complexos
implementation(libs.material) // experiência visual
}