====== 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 |
==== Camera & Multimedia ====
^ 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 =====
Ver [[build-and-deployment#proguard_rules|build-and-deployment.md]]
===== 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 =====
* [[https://docs.gradle.org/current/userguide/platforms.html|gradle/libs.versions.toml documentation]]
* [[https://developer.android.com/jetpack/androidx/versions|Android Developers Dependency Versions]]
* [[https://kotlinlang.org/docs/releases.html|Kotlin Release Notes]]