Prerrequisitos

  1. Instalar Android Studio

    Descarga e instala Android Studio Ladybug o una versión más reciente desde el sitio oficial de Android.

  2. Instalar JDK 17

    El proyecto requiere Java 17. Verifica tu instalación:

    Terminal
    java -version
    # Debería mostrar: openjdk version "17.x.x"
  3. Clonar el Repositorio

    Clona el código fuente de iMirly:

    Terminal
    git clone "https://github.com/yourusername/imirly.git"
    cd imirly/frontend

Configuración del Proyecto

1 Configurar Gradle

El proyecto utiliza Kotlin DSL para la configuración de Gradle. Archivos clave:

app/build.gradle.kts
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
}

android {
    namespace = "com.imirly.app"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.imirly.app"
        minSdk = 26
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }

    buildFeatures {
        compose = true
    }
}

dependencies {
    // Jetpack Compose
    implementation(libs.androidx.compose.ui)
    implementation(libs.androidx.compose.material3)
    implementation(libs.androidx.activity.compose)
    
    // Retrofit para llamadas API
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    
    // Navigation
    implementation("androidx.navigation:navigation-compose:2.8.0")
    
    // ViewModel
    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4")
    
    // Material Icons Extended
    implementation("androidx.compose.material:material-icons-extended")
}

2 Sincronizar Proyecto

Después de abrir el proyecto en Android Studio:

1

Sincronizar Gradle

Haz clic en File → Sync Project with Gradle Files o en el botón de sincronización en la barra de herramientas.

2

Descargar Dependencias

Gradle descargará todas las dependencias necesarias. Esto puede tardar varios minutos en la primera ejecución.

3

Verificar Build

Revisa la ventana de Build para verificar que no hay errores.

Configurar Conexión al Backend

Actualizar Base URL

Edita RetrofitClient.kt para apuntar a tu servidor backend:

network/RetrofitClient.kt
package com.imirly.app.network

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import okhttp3.OkHttpClient

object RetrofitClient {
    // Para Android Emulator, usa 10.0.2.2 para acceder a localhost
    private const val BASE_URL = "http://10.0.2.2:8080"
    
    // Para dispositivo físico, usa la IP de tu computadora:
    // private const val BASE_URL = "http://192.168.1.100:8080"
    
    private val okHttpClient = OkHttpClient.Builder()
        .addInterceptor { chain ->
            val originalRequest = chain.request()
            val token = TokenManager.jwtToken
            
            val newRequest = if (token != null) {
                originalRequest.newBuilder()
                    .header("Authorization", "Bearer $token")
                    .build()
            } else {
                originalRequest
            }
            
            chain.proceed(newRequest)
        }
        .build()

    val apiService: AuthApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(AuthApiService::class.java)
    }
    
    val catalogService: CatalogApiService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(CatalogApiService::class.java)
    }
    
    // Servicios adicionales...
}
Consejos de Red del Emulador
  • 10.0.2.2 mapea a localhost en tu máquina de desarrollo
  • Para dispositivos físicos, usa la dirección IP local de tu computadora
  • Asegúrate de que tu backend esté ejecutándose y sea accesible

Ejecutar la Aplicación

  1. Crear AVD

    Abre Tools → Device Manager y crea un nuevo dispositivo virtual:

    • Dispositivo: Pixel 5 o más reciente
    • Imagen del Sistema: Android 13 (API 33) o superior
  2. Iniciar Emulador

    Haz clic en el botón de play junto a tu AVD para lanzar el emulador.

  3. Ejecutar App

    Haz clic en el botón Run (icono de play verde) en la barra de herramientas de Android Studio.

  1. Habilitar Opciones de Desarrollador

    En tu dispositivo Android:

    • Ve a Configuración → Acerca del Teléfono
    • Toca Número de compilación 7 veces
    • Regresa a Configuración y abre Opciones de Desarrollador
  2. Habilitar Depuración USB

    En Opciones de Desarrollador, activa Depuración USB.

  3. Conectar Dispositivo

    Conecta tu dispositivo vía USB y autoriza la computadora cuando se te solicite.

  4. Actualizar BASE_URL

    Cambia el BASE_URL en RetrofitClient.kt a la IP local de tu computadora:

    RetrofitClient.kt
    private const val BASE_URL = "http://192.168.1.100:8080"
  5. Ejecutar App

    Selecciona tu dispositivo del menú desplegable de dispositivos y haz clic en Run.

Verificar Instalación

Después de ejecutar la app, deberías ver:

  • Pantalla de Onboarding con la marca iMirly
  • Botones de Login/Registro
  • Sin errores de red en Logcat

Revisar Logcat por Errores

Abre View → Tool Windows → Logcat y filtra por:

Filtro Logcat
package:com.imirly.app

Busca errores de RetrofitClient o ViewModel.

Solución de Problemas

Build falla: 'minSdk version should not be declared'

Asegúrate de usar la versión de Android Studio Ladybug o más reciente. Limpia y reconstruye el proyecto.

Error de red: Unable to resolve host

Verifica que el backend esté ejecutándose y que la BASE_URL sea correcta. Para emulador usa 10.0.2.2, para dispositivo físico usa la IP de tu red local.

Retrofit: Unable to create call adapter

Verifica que tienes la dependencia de Gson converter correctamente añadida en build.gradle.kts.

JWT token no persiste

Asegúrate de que TokenManager esté correctamente implementado con SharedPreferences o DataStore.

Próximos Pasos