Esta es una aplicación avanzada de escáner y generador de códigos QR para Android, creada con Jetpack Compose. Utiliza inteligencia artificial a través de la API de Gemini para generar códigos QR personalizados y cuenta con autenticación de usuarios mediante Firebase.
- 🔐 Autenticación de usuarios: Sistema completo de inicio de sesión con Google utilizando Firebase Authentication. La sesión se mantiene persistente entre reinicios de la aplicación.
- 📷 Escáner de códigos QR: Escanea códigos QR y códigos de barras con la cámara de tu dispositivo. Utiliza ML Kit de Google para un reconocimiento rápido y preciso.
- ✨ Generador de códigos QR con IA: Genera códigos QR personalizados usando lenguaje natural. Describe lo que quieres y la IA de Gemini interpretará tu solicitud para crear el código QR con los colores y estilos que especifiques.
- 🎨 Temas dinámicos: Soporte para temas personalizados utilizando Material Kolor, adaptándose a las preferencias del usuario.
- 📝 Reconocimiento de texto (OCR): Además de códigos QR, la aplicación puede reconocer y extraer texto de imágenes usando ML Kit.
- 💾 Descarga de códigos QR: Guarda los códigos QR generados directamente en la galería de tu dispositivo.
- 🎯 Interfaz de usuario moderna: Construida completamente con Jetpack Compose para una experiencia fluida y receptiva.
- 🏗️ Arquitectura limpia: Código organizado siguiendo los principios de Clean Architecture con separación clara entre capas (Presentación, Dominio, Datos).
- 💉 Inyección de dependencias: Utiliza Koin para una gestión eficiente de dependencias.
El proyecto sigue una arquitectura limpia en capas:
- Presentation: ViewModels, Screens y componentes de UI con Jetpack Compose
- Domain: Casos de uso (UseCases) y modelos de dominio
- Data: Repositorios, implementaciones y fuentes de datos (Firebase, DataStore, Gemini AI)
- Jetpack Compose - Framework moderno de UI declarativa
- Kotlin - Lenguaje de programación principal
- Kotlin Coroutines - Programación asíncrona
- Kotlin Serialization - Serialización de datos JSON
- Koin - Framework de inyección de dependencias ligero
- Firebase Authentication - Autenticación de usuarios
- Firebase AI (Gemini) - Integración con la API de Gemini para generación inteligente de QR
- ML Kit Barcode Scanning - Escaneo de códigos QR y códigos de barras
- ML Kit Text Recognition - Reconocimiento óptico de caracteres (OCR)
- CameraX - API moderna de cámara de Android
- Material 3 - Componentes de Material Design
- Material Kolor - Generación dinámica de esquemas de color
- Compose Icons (Font Awesome) - Biblioteca de iconos
- Compose Rich Text - Renderizado de texto enriquecido y Markdown
- DataStore Preferences - Almacenamiento persistente de preferencias y sesión de usuario
- qrose - Generación personalizada de códigos QR
- Accompanist Permissions - Manejo de permisos en tiempo de ejecución
- Navigation Compose - Navegación entre pantallas
-
Clona el repositorio:
git clone https://github.com/christopher-two/Qr.git cd Qr -
Configura Firebase:
- Crea un proyecto en Firebase Console
- Agrega una aplicación Android con el package name
org.christophertwo.qr - Descarga el archivo
google-services.jsony colócalo en la carpetaapp/ - Habilita Authentication en Firebase Console y activa el proveedor de Google Sign-In
- Copia el Web client ID de tu configuración OAuth 2.0
-
Configura las credenciales locales:
- Crea un archivo
local.propertiesen la raíz del proyecto si no existe - Agrega tu clave de API de Gemini (obtén una en Google AI Studio):
gemini.key=TU_API_KEY_DE_GEMINI- Agrega el Web client ID de Firebase en
app/src/main/res/values/strings.xml:
<string name="web_id">TU_WEB_CLIENT_ID_DE_FIREBASE</string>
- Crea un archivo
-
Abre en Android Studio:
- Abre Android Studio y selecciona "Abrir un proyecto existente"
- Navega hasta el directorio del proyecto y haz clic en "Aceptar"
- Espera a que se descarguen todas las dependencias
-
Ejecuta la aplicación:
- Conecta tu dispositivo Android (SDK 31+) o inicia un emulador
- Haz clic en el botón "Run" en Android Studio
Al abrir la aplicación por primera vez, se te presentará una pantalla de inicio de sesión. La aplicación utiliza Firebase Authentication para gestionar el inicio de sesión con Google. Una vez autenticado, tu sesión se guarda localmente usando DataStore, por lo que no tendrás que iniciar sesión cada vez que abras la app.
La función de generación utiliza la API de Gemini (a través de Firebase AI) para interpretar indicaciones en lenguaje natural. Por ejemplo:
- "Un código QR para mi sitio web https://ejemplo.com con puntos azules"
- "Genera un QR con mi email contacto@ejemplo.com en color verde"
- "Crea un código QR con mi número de teléfono +1234567890"
La IA procesa tu solicitud y devuelve un objeto estructurado con:
- El contenido del QR
- Los colores personalizados (foreground y background)
- El estilo visual
Luego, la biblioteca qrose genera el código QR con estas especificaciones.
Utiliza la cámara del dispositivo con CameraX y ML Kit para detectar y decodificar códigos QR y códigos de barras en tiempo real. La aplicación muestra una vista previa de la cámara y cuando detecta un código, muestra automáticamente su contenido.
- CAMERA - Para escanear códigos QR
- INTERNET - Para comunicación con Firebase y Gemini AI
- READ_MEDIA_IMAGES - Para guardar códigos QR generados
- Android SDK 31 (Android 12) o superior
- Cámara trasera con enfoque automático (recomendado)
- Conexión a Internet
app/src/main/java/org/christophertwo/qr/
├── core/ # Utilidades comunes y temas
├── data/ # Repositorios e implementaciones
│ ├── auth/ # Autenticación con Google
│ ├── session/ # Gestión de sesiones de usuario
│ ├── repository/ # Interfaces de repositorios
│ └── impl/ # Implementaciones de repositorios
├── domain/ # Lógica de negocio
│ ├── model/ # Modelos de dominio
│ └── usecase/ # Casos de uso
├── presentation/ # Capa de presentación
│ ├── screen/ # Pantallas (Scanner, Generator, Start)
│ ├── components/ # Componentes reutilizables de UI
│ └── navigation/ # Configuración de navegación
└── di/ # Módulos de inyección de dependencias
Las contribuciones son bienvenidas. Por favor, abre un issue primero para discutir los cambios que te gustaría realizar.
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.
Christopher Two
- GitHub: @christopher-two


