Dependencias del Proyecto PAE
Resumen de dependencias
El proyecto PAE utiliza un conjunto seleccionado de dependencias que balancean funcionalidad, performance y mantenibilidad.
┌─────────────────────────────────────────────────────┐
│ grouplabs.versions.toml │
│ (Centralized version management) │
└──────────────────┬──────────────────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
Android Kotlin Others
Gradle Language Libraries
Versiones principales
Ubicación: gradle/libs.versions.toml
[versions]
kotlin = "2.3.10"
gradle = "8.0"
compose = "1.5.4"
compileSdk = "36"
minSdk = "27"
targetSdk = "36"
jvmTarget = "17"
[libraries]
# Android Core
androidx-core-ktx = "1.10.1"
androidx-lifecycle-runtime-ktx = "2.6.1"
androidx-activity-compose = "1.7.2"
# Compose
androidx-compose-bom = "2023.09.00"
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
androidx-compose-material3 = { module = "androidx.compose.material3:material3", version = "1.1.2" }
# Coroutines
kotlinx-coroutines-core = "1.7.3"
kotlinx-coroutines-android = "1.7.3"
# Serialization
kotlinx-serialization-json = "1.6.2"
# HTTP Client
fuel = "2.3.1"
okhttp = "4.11.0"
# Dependency Injection
hilt-android = "2.48"
# WorkManager
androidx-work-runtime-ktx = "2.8.1"
# Database
room-runtime = "2.6.0"
# Security
androidx-security-crypto = "1.1.0-alpha06"
google-play-services-integrity = "1.2.0"
# Testing
junit = "4.13.2"
mockito-kotlin = "5.1.0"
robolectric = "4.12.1"
[plugins]
android-application = "com.android.application:8.1.0"
android-library = "com.android.library:8.1.0"
kotlin-android = "org.jetbrains.kotlin.android:1.9.20"
kotlin-kapt = "org.jetbrains.kotlin.kapt:1.9.20"
hilt-gradle = "com.google.dagger.hilt.android:2.48"
Desglose por categoría
Android Framework
| Librería | Versión | Por qué |
androidx:core-ktx | 1.10.1 | Extensiones Kotlin para Android |
androidx:lifecycle-runtime | 2.6.1 | Lifecycle awareness en corrutinas |
androidx:activity-compose | 1.7.2 | Integración Activity + Compose |
androidx:appcompat | 1.6.1 | Compatibilidad hacia atrás |
androidx:annotation | 1.6.0 | Anotar métodos para lint |
Jetpack Compose
| Librería | Versión | Por qué |
compose:ui | BOM 2023.09 | UI declarativa |
compose:material3 | 1.1.2 | Design System M3 |
compose:animation | BOM | Animaciones smooth |
compose:foundation | BOM | Layout + touch handling |
compose:runtime | BOM | State management |
BOM (Bill of Materials): versionado coordinado automático
// build.gradle.kts
dependencies {
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
// versiones automáticas coordinadas
}
Kotlin & Coroutines
| Librería | Versión | Por qué |
kotlin:stdlib-jdk8 | 2.3.10 | Runtime Kotlin |
kotlinx:coroutines-core | 1.7.3 | Async/await |
kotlinx:coroutines-android | 1.7.3 | Integration Android |
kotlinx:serialization:json | 1.6.2 | JSON parsing |
Networking
| Librería | Versión | Por qué |
fuel | 2.3.1 | HTTP client ligero |
okhttp | 4.11.0 | Transporte HTTP subyacente |
okhttp:logging-interceptor | 4.11.0 | Debug HTTP requests |
Por qué Fuel + OKHttp:
Fuel es wrapper ligero sobre OKHttp
OKHttp es estándar de Android
OKHttp soporta certificate pinning
Dependency Injection
| Librería | Versión | Por qué |
hilt-android | 2.48 | DI estándar para Android |
hilt-compiler | 2.48 | Code generation |
Nota: RutaPAE usa inyección manual en DomainManager para mayor simplicity.
Persistencia
| Librería | Versión | Por qué |
room:runtime | 2.6.0 | ORM built-in Android |
room:ktx | 2.6.0 | Coroutines support |
Personalizado: VectorDB | local | Índices vectoriales |
Por qué custom VectorDB:
Room no soporta búsqueda vectorial
VectorDB proporciona ORM + índices HNSW
Control fino sobre esquema
Background Work
| Librería | Versión | Por qué |
androidx:work-runtime-ktx | 2.8.1 | Scheduled tasks |
Uso en RutaPAE: DeliverySyncWorker se ejecuta periódicamente
Security
| Librería | Versión | Por qué |
androidx:security:crypto | 1.1.0-alpha | EncryptedSharedPreferences |
google-play-services:integrity | 1.2.0 | Play Integrity API |
tink | 1.1.0 | Encriptación avanzada |
| Librería | Versión | Por qué |
androidx:camera:camera2 | 1.2.0 | Camera2 API |
androidx:camera:lifecycle | 1.2.0 | Lifecycle Camera |
androidx:camera:view | 1.2.0 | Preview composable |
Testing
Unit Testing
| Librería | Versión | Por qué |
junit | 4.13.2 | Framework testing |
mockito:kotlin | 5.1.0 | Mocking framework |
mockito:inline | 5.1.0 | Mockear finales |
robolectric | 4.12.1 | Mock Android |
kotlinx:coroutines:test | 1.7.3 | Test coroutines |
Android Testing
| Librería | Versión | Por qué |
androidx:test:ext-junit | 1.1.5 | JUnit runner Android |
androidx:test:espresso | 3.5.1 | UI testing framework |
androidx:compose:ui:test-junit4 | BOM | Compose UI tests |
androidx:work:work-testing | 2.8.1 | WorkManager test |
Code Coverage
| Librería | Versión | Por qué |
jacoco | 0.8.8 | Code coverage metrics |
Computer Vision (Machine)
| Librería | Versión | Por qué |
Local: ComputerVision | - | Modelos IA custom |
tensorflow:lite | 2.13.0 | Inference on-device |
Logging
| Librería | Versión | Por qué |
Local: Core | - | Logging abstraction |
timber | 5.0.1 | Logging framework |
Build Plugins
plugins {
id("com.android.application") version "8.1.0"
id("com.google.dagger.hilt.android") version "2.48"
kotlin("android") version "2.3.10"
kotlin("kapt") version "2.3.10"
}
Matriz de dependencias por módulo
Machine RutaPAE Domain Data Contract Core DirectLink
android:core-ktx ✓ ✓ ✓ ✓ ✓ ✓
compose:ui ✓ ✓
compose:material3 ✓ ✓
coroutines ✓ ✓ ✓ ✓ ✓ ✓
serialization ✓ ✓ ✓ ✓ ✓ ✓
fuel/okhttp ✓ ✓ ✓ ✓ ✓ ✓
hilt ✓
room ✓ ✓
VectorDB ✓ ✓
security:crypto ✓ ✓
work:runtime ✓ ✓
camera:camera2 ✓
tensorflow ✓
timber ✓ ✓ ✓ ✓ ✓
Gestión de versiones
Estrategia de versionado
Kotlin: 2.3.10 (versión nueva, kotlin multiplatform compatible)
Android Gradle Plugin: 8.1.0 (namespace required)
Compose: BOM 2023.09 (versionado coordinado)
Librerías Android: latest estables (1-2 versiones atrás)
Actualizar dependencias
# Verificar versiones disponibles
./gradlew dependencyUpdates
# Actualizar todo
./gradlew :dependencies --refresh-dependencies
# Actualizar específico
# Editar gradle/libs.versions.toml y rebuild
Exclusiones comunes
// evitar errores de versión
configurations {
all {
exclude group: 'com.google.guava', module: 'guava-jdk5'
}
}
Librerías no incluidas (y por qué)
| Librería | Por qué NO |
| Retrofit | Fuel es más ligero |
| Dagger 2 | Hilt es reemplazo modern |
| RxJava | Coroutines son futuro Kotlin |
| Firebase | Proyecto offline-first |
| Jetpack Paging | Lista simple suficiente |
| Protocol Buffers | Serialization JSON suficiente |
| Realm | Room es estándar Google |
| Ktor Client | Fuel/OKHttp suficiente |
ProGuard rules
Dependencias de desarrollo
[libraries]
# Testing
junit = "4.13.2"
mockito-kotlin = "5.1.0"
robolectric = "4.12.1"
# Build
gradle = "8.1.0"
kotlin-plugin = "2.3.10"
kotlin-kapt = "2.3.10"
# Linting (optional)
ktlint = "0.49.1"
detekt = "1.23.0"
Resolución de conflictos
Transitive dependencies
./gradlew :app:dependencies | grep -i conflicting
# Resolver versión en conflict
./gradlew :app:dependencies | grep "com.google.guava"
Ejemplo: Conflict de Guava
dependencies {
// Forcing específica
implementation("com.google.guava:guava:32.1.2-jre") {
force = true
}
}
Lock file (Gradle 7.4+)
Generar lock file para reproducibilidad:
./gradlew :app:dependencies --write-locks
# Verificar locks en ci
./gradlew :app:dependencies --apply-locks
Referencias