Calculadora ligera y moderna para Android, diseñada específicamente para calcular y optimizar el GRL (Global Rating Level) en FC Mobile. La aplicación está desarrollada íntegramente en Kotlin utilizando Jetpack Compose (Material 3) para ofrecer una interfaz nativa, fluida y reactiva.
- Cálculo automático del GRL global: a partir de los 11 titulares (y hasta 7 suplentes).
- Gestión de titulares y suplentes: añade o elimina suplentes dinámicamente con límites reglamentarios.
- Rango rápido: aplica el rango deseado a todos los jugadores con un solo toque (0‑5).
- Gestión de Plantillas (Squad Management):
- Guarda múltiples alineaciones personalizadas con nombre propio.
- Carga y alterna entre diferentes plantillas guardadas al instante.
- Elimina alineaciones con confirmación de seguridad.
- Persistencia local reactiva mediante Room Database.
- Copia de Seguridad y Restauración JSON (Backup & Restore):
- Exporta todas tus plantillas y configuraciones en archivos
.jsonportables. - Importa backups de forma segura con validación de esquema y gestión de duplicados.
- Exporta todas tus plantillas y configuraciones en archivos
- Pantalla de Ajustes Dedicada (Settings):
- Control de copias de seguridad locales y restauración.
- Opciones de personalización de tema y Color Dinámico (Material You).
- Resumen del sistema e información de versión.
- Sugerencias inteligentes y caminos de optimización:
- Muestra en paralelo las dos vías posibles para subir de nivel: Vía GRL Base vs. Vía Rango.
- Identifica y destaca visualmente el Camino más rápido para alcanzar el próximo OVR.
- Información de precisión: promedios decimales exactos de GRL Base y Rango (ej.
125.81 • 4.90) para comprender el algoritmo de redondeo de EA Sports. - Exportación y Compartir Tarjeta de Resultados:
- Vista previa modal de la tarjeta de resumen.
- Guardado en alta calidad en la galería del dispositivo (
Pictures/FCMetrix). - Compartir imagen directamente en apps de mensajería y redes sociales mediante
FileProvider.
- Material You y Color Dinámico: soporte para paletas dinámicas basadas en el fondo de pantalla (Android 12+), con toggle manual persistente en DataStore.
- Ícono Adaptativo & Themed Icons (Monocromo):
- Soporte completo para íconos adaptativos y tema monocromático dinámico en Android 13+ (API 33).
- Accesibilidad (TalkBack): descripciones semánticas enriquecidas para lectores de pantalla en todas las acciones, tarjetas y listas.
- Rendimiento optimizado: integración de Baseline Profiles para tiempos de inicio inmediatos y scroll sin jank.
- Funciona 100% Offline: todos los cálculos y datos se procesan en el dispositivo sin necesidad de conexión a Internet.
- Soporte multi-idioma: Español e Inglés con detección automática.
- Privacidad y Ética:
- Sin permisos sensibles: No solicita acceso a cámara, ubicación ni contactos.
- Sin telemetría ni rastreo: Cero analíticas, cero rastreadores. Tu actividad es privada.
- Código abierto (FOSS): Totalmente transparente y auditable por la comunidad.
El GRL Global se calcula utilizando por separado el promedio del GRL Base y el promedio del Rango.
Donde:
-
Promedio GRL Base
$= \frac{\sum (\text{GRL}_i - \text{Rango}_i)}{N}$ -
Promedio Rango
$= \frac{\sum \text{Rango}_i}{N}$
El redondeo hacia arriba (ceil) se aplica de forma independiente a cada promedio antes de realizar la suma final.
-
$N$ = total de jugadores con GRL asignado. - Mínimo de jugadores: 11 (si faltan titulares, no se calcula el GRL Global).
- Máximo de jugadores: 18 (11 titulares + hasta 7 suplentes).
- Límites de GRL: 47 – 150.
- Límites de Rango: 0 – 5.
- Los jugadores sin GRL cargado no participan del cálculo.
- Prioridad de recomendación: En caso de empate en la cantidad de puntos necesarios para subir de nivel entre GRL Base y Rango, se prioriza y recomienda la mejora de GRL Base.
| Tecnología | Versión / Uso |
|---|---|
| Kotlin | Lenguaje principal del proyecto (Kotlin 2.2.10) |
| Jetpack Compose | UI declarativa moderna basada en Material 3 |
| Room Database | Persistencia SQLite local para alineaciones guardadas |
| DataStore Preferences | Almacenamiento reactivo de configuraciones (Color Dinámico) |
| Kotlinx Serialization | Serialización JSON segura para copias de seguridad portables |
| Kotlin Coroutines & Flow | Programación asíncrona reactiva con StateFlow |
| AndroidX Lifecycle | Arquitectura ViewModel con retención de estado |
| KSP | Kotlin Symbol Processing para Room y generadores de código |
| Baseline Profiles | Precompilación de rutas críticas para inicio y render ultra-rápido |
| JUnit 4 & Espresso | Pruebas unitarias e instrumentadas automatizadas |
| GitHub Actions CI/CD | Automatización de Quality Gates, tests, lint y releases firmadas |
| Gradle (Kotlin DSL) | Sistema de compilación y gestión de dependencias |
- Android Studio: Ladybug / Meerkat o superior.
- Android SDK:
minSdk 24(Android 7.0+),targetSdk 35(Android 15),compileSdk 37. - JDK: Java 17 / 21.
- Compilar Debug APK:
./gradlew assembleDebug
- Compilar Release APK:
./gradlew assembleRelease
- Ejecutar Tests Unitarios:
./gradlew testDebugUnitTest
- Sincronizar Harness de Agentes:
./gradlew syncHarness
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.
Kveld — GitHub









