====== 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]]