MiraiLink es la app social diseñada para fans del anime y los videojuegos, con backend propio en ExpressJS e interfaz creada íntegramente con Jetpack Compose.
- MVVM estructurado en capas Clean Architecture con separación clara entre dominio, datos e interfaz
- Inyección de dependencias mediante Hilt con KSP y calificadores personalizados para credenciales
- Retrofit, Paging y Room para consumir servicios REST y gestionar caché local de artículos
- DataStore Preferences para recordar el flujo de onboarding y ajustes de usuario
- Interfaz Material 3 con navegación Compose, componentes reutilizables y soporte para español y modo nocturno
- Catálogo de versiones Gradle que unifica plugins y dependencias para facilitar actualizaciones
- Android Studio Koala Feature Drop (2024.1.2) o superior con Android Gradle Plugin 8.11.1
- Gradle 8.14.2 (incluido mediante wrapper) y Kotlin 2.2.0 habilitado para K2 y Compose Compiler
- JDK 21 configurado en el IDE para compilar con
sourceCompatibilityytargetCompatibility21 - Android SDK 36 instalado junto con las Platform Tools y Build Tools recientes
- Dispositivos o emuladores con Android 8.0 (API 26) o superior, que coincide con
minSdk
-
Clona el repositorio y abre la carpeta raíz desde Android Studio (
File > Open). -
Verifica que
local.propertiescontenga elsdk.dirde tu instalación del SDK de Android. -
Añade tus claves en
local.properties:api_key=TU_API_KEY_DE_NEWSAPI deepl_api_key=TU_API_KEY_DE_DEEPLEstas entradas se exponen como
stringen recursos para los módulos Hilt deAppModule. -
Sincroniza Gradle (
Sync Now) para descargar dependencias y generar código con KSP.
- Desde Android Studio, selecciona la configuración
app, elige un dispositivo objetivo y pulsaRun. - Para generar un APK sin IDE, ejecuta
./gradlew assembleDebug(Linux/macOS) ogradlew.bat assembleDebug(Windows) en la raíz del proyecto. - Las variantes de lanzamiento activan ProGuard, reducción de recursos y subida de símbolos de NDK configurada en
build.gradle.kts.
app/: módulo Android principal con código Kotlin, recursos y configuración específica.gradle/ygradle.properties: definen el wrapper y opciones globales de compilación.gradlewygradlew.bat: scripts para ejecutar tareas de Gradle sin instalarlo.contact.html: recurso estático de soporte utilizado en la sección de contacto.settings.gradle.ktsybuild.gradle.kts: coordinan plugins, catálogos de versiones y módulos incluidos.
build.gradle.kts: activa Compose, Hilt, Room, Paging, Retrofit y configura claves congradleLocalProperties.proguard-rules.pro: reglas adicionales para ofuscación en el build de lanzamiento.src/: contiene los paquetes de código (main), pruebas unitarias (test) y pruebas instrumentadas (androidTest).
annotations: define calificadores@NewsApiKeyy@DeeplApiKeypara diferenciar inyecciones de cadenas.data/local: base de datos Room, DAO y conversores para almacenar artículos guardados.data/manager: implementación deLocalUserManagercon DataStore para el flujo de onboarding.data/remote: interfazNewsApiyPagingSourceque consumen el backend REST mediante Retrofit.data/remote/dto: modelos de transferencia alineados con las respuestas del servicio.data/repository: implementación concreta deNewsRepositoryque combina remoto y local.di: módulos Hilt (AppModule,ManagerModule,RepositoryModule) que exponen dependencias de ámbitoSingleton.domain/manager: contratos que abstraen el almacenamiento de preferencias.domain/model: modelos de dominio consumidos por la capa de presentación.domain/repository: interfaz del repositorio de noticias accesible desde los casos de uso.domain/usecase: casos de uso comoGetNews,SearchNews,UpsertArticleoSaveAppEntry.domain/util: utilidades compartidas, por ejemplo, transformaciones de cadenas.presentation/bookmark,home,newsDetail,onboarding,search,contact: pantallas Compose feature-first con susViewModel.presentation/navigation: gráfico de navegación compuesto con destinos y componentes auxiliares.presentation/common: elementos reutilizables como estados de carga, chips o listas.ui/theme: colores, tipografías y estilos Material 3 adaptados al branding de MiraiLink.util: constantes (Constants) y envoltorios de estado (DataState) compartidos.
valuesyvalues-es: strings y estilos base con localización al español.values-night: paleta nocturna para temas dinámicos.drawableyfont: assets estáticos utilizados por la interfaz Compose.- Carpetas
mipmap-*: iconografía para distintos densidades. xml: configuraciones comobackup_rules.xmlo definiciones de datos seguros.
gradle/libs.versions.toml: centraliza versiones de AGP 8.11.1, Kotlin 2.2.0, Compose BOM 2025.07.00, Hilt 2.57, Retrofit 3.0.0, Room 2.7.2, Paging 3.3.6, Coil 2.7.0 y Google Play Integrity 1.4.0.- Los plugins se declaran con alias (
alias(libs.plugins.android.application)) para mantener consistencia y facilitar actualizaciones.
- Jetpack Compose Material 3 y Navigation Compose para UI declarativa y navegación basada en gráficos.
- Hilt con KSP para inyección de dependencias y enlaces automáticos de componentes.
- Retrofit con convertidor Gson para consumo de servicios REST expuestos por el backend ExpressJS.
- Room y Paging que manejan la persistencia local de artículos y listas infinitas.
- DataStore Preferences para persistir flags ligeros, como la entrada al onboarding.
- Coil para carga de imágenes eficiente dentro de composables.
- Google Play Integrity como protección adicional en builds de producción.
src/test/java: pruebas unitarias basadas en JUnit para ViewModels y casos de uso.src/androidTest/java: pruebas instrumentadas con Espresso y Compose Testing para validaciones UI.- Tareas recomendadas:
./gradlew testDebugUnitTestpara unit tests y./gradlew connectedDebugAndroidTestcon un dispositivo/emulador conectado.
Cada pantalla Compose debe iniciar su árbol con un contenedor que aplique padding(top = MediumPadding1, start = MediumPadding1, end = MediumPadding1) y statusBarsPadding() para evitar que la barra de estado solape el contenido.