Un entorno de desarrollo Flutter completamente containerizado y portable para desarrollo de aplicaciones móviles. Este setup permite trabajar con Flutter sin necesidad de instalarlo localmente, garantizando consistencia entre diferentes equipos y dispositivos.
- Características
- Requisitos Previos
- Instalación Rápida
- Configuración Detallada
- Uso con Dispositivos Android
- Comandos Útiles
- Desarrollo con VS Code
- Solución de Problemas
- Contribución
- Flutter 3.24.4 con Dart SDK
- Android SDK 34 preconfigurado
- Soporte para dispositivos físicos Android via USB
- Integración completa con VS Code mediante Dev Containers
- Hot Reload y Hot Restart funcionando
- Volúmenes persistentes para mantener el SDK y dependencias
- Configuración optimizada para desarrollo móvil
- Docker (versión 20.10 o superior)
- Docker Compose (versión 2.0 o superior)
- Visual Studio Code (opcional pero recomendado)
- Extensión Dev Containers para VS Code
- Dispositivo Android con depuración USB habilitada
- ADB instalado en el sistema host:
- Linux: Se instala automáticamente en la mayoría de distribuciones
- Windows: Se incluye con Android Studio o se puede instalar por separado
-
Clona este repositorio:
git clone https://github.com/tu-usuario/flutter-docker-dev.git cd flutter-docker-dev -
Construye y ejecuta el entorno:
docker-compose up -d --build
-
Accede al contenedor:
docker-compose exec flutter bash -
Crea tu primer proyecto:
flutter create mi_app cd mi_app flutter run
flutter-docker-dev/
├── Dockerfile # Configuración de la imagen Docker
├── docker-compose.yml # Configuración de servicios
├── .devcontainer/
│ └── devcontainer.json # Configuración para VS Code Dev Containers
├── .vscode/
│ ├── settings.json # Configuraciones de VS Code
│ └── launch.json # Configuraciones de depuración
├── .gitignore # Archivos a ignorar en Git
└── README.md # Este archivo
El entorno incluye:
- Base: Ubuntu 22.04 LTS
- Flutter: Versión 3.24.4 (stable)
- Android SDK: API Level 34
- Build Tools: 34.0.0
- Herramientas adicionales: ADB, Git, herramientas de compilación
-
Habilita las Opciones de Desarrollador:
- Ve a
Configuración→Acerca del teléfono - Toca
Número de compilación7 veces
- Ve a
-
Activa la Depuración USB:
- Ve a
Configuración→Opciones de desarrollador - Activa
Depuración USB
- Ve a
-
Conecta el dispositivo via USB y acepta el diálogo de permisos
Para dispositivos Xiaomi/Google (ID 18d1):
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-android.rules
sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
sudo udevadm triggerPara otros fabricantes, identifica el ID del proveedor:
lsusb
# Busca tu dispositivo y reemplaza 18d1 con el ID correspondiente-
Instala los drivers USB del fabricante de tu dispositivo:
- Samsung: Samsung USB Driver
- Xiaomi: Mi USB Driver
- Google: Google USB Driver
- O instala Android Studio que incluye drivers universales
-
Verifica que Windows reconoce el dispositivo:
- Abre el Administrador de dispositivos
- Busca tu dispositivo en "Dispositivos portátiles" o "Android Device"
# Ubuntu/Debian:
sudo apt install android-tools-adb
# Fedora:
sudo dnf install android-tools
# Arch:
sudo pacman -S android-tools
# Iniciar servidor ADB
adb kill-server
adb start-server
adb devices # Verificar que el dispositivo aparece# Si tienes Android Studio instalado, ADB ya está disponible
# Sino, descarga Platform Tools de Android:
# https://developer.android.com/studio/releases/platform-tools
# Añade ADB al PATH o usa la ruta completa
adb devices # Verificar que el dispositivo aparece# Dentro del contenedor
cd tu_proyecto
flutter devices # Verificar dispositivos disponibles
flutter run # Ejecutar en dispositivo conectado# Iniciar el entorno
docker-compose up -d
# Detener el entorno
docker-compose down
# Reconstruir la imagen
docker-compose up -d --build
# Ver logs
docker-compose logs -f
# Acceder al contenedor
docker-compose exec flutter bash# Crear nuevo proyecto
flutter create --platforms=android,ios nombre_proyecto
# Ejecutar aplicación
flutter run
# Hot reload (mientras la app está ejecutándose)
# Presiona 'r' en la terminal
# Hot restart (mientras la app está ejecutándose)
# Presiona 'R' en la terminal
# Construir APK
flutter build apk
# Limpiar proyecto
flutter clean
# Obtener dependencias
flutter pub get
# Verificar configuración
flutter doctor -v# Listar dispositivos
adb devices
# Instalar APK
adb install archivo.apk
# Ver logs del dispositivo
adb logcat
# Reiniciar servidor ADB
adb kill-server && adb start-server- Abre el proyecto en VS Code
- Instala la extensión Dev Containers si no la tienes
- Abre la paleta de comandos (F1 o Ctrl+Shift+P)
- Ejecuta:
Dev Containers: Reopen in Container - Espera a que VS Code configure el entorno automáticamente
- Dart
- Flutter
- Flutter Helper
- Flutter Riverpod Snippets
- Awesome Flutter Snippets
- Flutter Intl
El proyecto incluye configuraciones predefinidas para:
- Debug en dispositivo móvil
- Debug en modo web
- Profile mode
- Release mode
- Ejecución de tests
-
Verifica que el dispositivo aparece en el host:
lsusb # Debe aparecer tu dispositivo adb devices # Debe mostrar tu dispositivo
-
Verifica reglas udev:
# Verifica que existe la regla ls -la /etc/udev/rules.d/51-android.rules # Recarga reglas si es necesario sudo udevadm control --reload-rules sudo udevadm trigger
-
Reinicia el contenedor:
docker-compose down docker-compose up -d
# En el host
adb kill-server
adb start-server
# Reinicia el contenedor
docker-compose restart# Corregir propietario de archivos
sudo chown -R $USER:$USER .
# Verificar que el usuario está en el grupo plugdev (Linux)
groups $USER-
Verifica que el contenedor está ejecutándose:
docker ps
-
Usa "Attach to Running Container" en lugar de "Reopen in Container"
-
Verifica que no hay conflictos de puertos:
docker-compose down docker-compose up -d
-
Añade exclusiones para mejor rendimiento:
- Añade carpetas como
build/,.dart_tool/a tu.gitignore - Usa volúmenes nombrados para dependencias grandes
- Añade carpetas como
-
En sistemas Windows/macOS, considera usar WSL2 o Docker Desktop con configuración optimizada
- Fork el repositorio
- Crea una rama para tu feature:
git checkout -b feature/nueva-caracteristica - Commit tus cambios:
git commit -am 'Añade nueva característica' - Push a la rama:
git push origin feature/nueva-caracteristica - Crea un Pull Request
Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.
Si tienes problemas o preguntas:
- Revisa la sección de Solución de Problemas
- Busca en los Issues existentes
- Crea un nuevo Issue con detalles sobre tu problema
- Documentación oficial de Flutter
- Documentación de Docker
- VS Code Dev Containers
- Android Debug Bridge (ADB)
¡Happy Coding! 🎉