Aplicación con frontend en React y backend en FastAPI.
- Ajuste de dependencias del frontend para evitar conflictos de instalación (
react18 +date-fns3 +react-leaflet4 compatible). - Fallback de
REACT_APP_BACKEND_URLen frontend para que no falle cuando la variable no esté definida. - Limpieza de
index.htmlpara uso de app móvil (sin badge/scripts externos). - Se añadió
manifest.jsonpara dejar la web lista para empaquetar como APK (PWA/WebView).
cd backend
pip install -r requirements.txt
# opcional: export MONGO_URL="mongodb://localhost:27017" (o MONGODB_URI) y DB_NAME="paraweather"
uvicorn server:app --host 0.0.0.0 --port 8001cd frontend
npm install
npm startcd frontend
npm run buildcd frontend
npm install @capacitor/core @capacitor/cli @capacitor/android
npx cap init Paraweather com.paraweather.app --web-dir=build
npm run build
npx cap add android
npx cap sync android
npx cap open androidCon eso se abre Android Studio para generar el APK/AAB.
Para generar un ZIP importable directamente en Android Studio:
cd frontend
npm run apk:zipSalida esperada:
frontend/dist/paraweather-android-studio.zip
Qué incluye el ZIP:
- Carpeta
android/lista para abrir en Android Studio capacitor.config.*package.jsonypackage-lock.json
Importación:
- Descomprime el ZIP.
- En Android Studio: File > Open.
- Selecciona la carpeta descomprimida y abre
android/. - Espera a que Gradle sincronice y compila APK/AAB desde Android Studio.
Nota: el script crea/sincroniza Capacitor automáticamente y reconstruye el frontend antes de empaquetar.
Sí: ahora el repo incluye un workflow de GitHub Actions que compila la APK y la sube a GitHub.
- Archivo:
.github/workflows/android-apk.yml - Evento manual: Actions > Build Android APK > Run workflow
- Evento por release: al crear un tag
v*(ejemplo:v1.0.0) también compila.
Dónde descargar la APK:
- Artifacts de Actions: descarga
paraweather-debug-apkdesde la ejecución. - Releases: si disparas con tag
v*, se adjuntaapp-debug.apkal release.
Comandos recomendados para publicar una APK en Releases:
git tag v1.0.0
git push origin v1.0.0- Ve a GitHub > Actions > Build Android APK.
- Pulsa Run workflow sobre
main. - Espera a que termine
build-apk. - Descarga el artifact
paraweather-debug-apk.
Ventajas:
- Reproducible para todo el equipo.
- No depende de tu SDK local.
Si creas un tag v*, el workflow adjunta automáticamente app-debug.apk al release.
git tag v1.0.0
git push origin v1.0.0Luego descarga la APK desde GitHub > Releases.
cd frontend
npm install
npm run build
npx cap add android # solo la primera vez
npx cap sync android
npx cap open androidEn Android Studio:
- Build > Build Bundle(s) / APK(s) > Build APK(s).
- Ruta típica de salida:
frontend/android/app/build/outputs/apk/debug/app-debug.apk.
cd frontend
npm run apk:zipGenera frontend/dist/paraweather-android-studio.zip para compartir/importar proyecto Android rápidamente.
Ese error suele ocurrir cuando Gradle se ejecuta con Java muy nuevo/incompatible.
Solución recomendada (Linux/macOS):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd frontend/android
./gradlew --no-daemon assembleDebugEn Windows PowerShell:
$env:JAVA_HOME="C:\Program Files\Java\jdk-17"
$env:Path="$env:JAVA_HOME\bin;$env:Path"
cd frontend\android
.\gradlew.bat assembleDebugUsa npm run apk:trigger:github para lanzar la compilación remota (ver sección siguiente con ejemplos completos).
Sí, técnicamente se puede, pero no es recomendable para un repo de código:
- Aumenta mucho el peso y el historial de Git.
- Cada build binaria ensucia los diffs.
- Es mejor publicar APK en Releases o en Artifacts.
Si igualmente quieres versionar binarios en Git, usa Git LFS y una carpeta dedicada (artifacts/), pero para este proyecto se recomienda Releases.
Si quieres ejecutarlo ya en GitHub (sin entrar al panel web), usa este script:
cd frontend
export GITHUB_TOKEN="<token_con_repo_y_actions>"
export GITHUB_REPO="tu-usuario/tu-repo"
export GITHUB_REF="main" # opcional
npm run apk:trigger:githubEn Windows PowerShell usa esto (cada línea por separado):
cd frontend
$env:GITHUB_TOKEN="<token_con_repo_y_actions>"
$env:GITHUB_REPO="tu-usuario/tu-repo"
$env:GITHUB_REF="main" # opcional
npm run apk:trigger:githubTambién puedes lanzarlo en una sola línea en PowerShell:
cd frontend; $env:GITHUB_TOKEN="<token>"; $env:GITHUB_REPO="tu-usuario/tu-repo"; $env:GITHUB_REF="main"; npm run apk:trigger:githubSi te aparece:
cd : ... \Desktop\frontend no existenpm error Missing script: "apk:trigger:github"
significa que no estás dentro del repositorio correcto (o tienes una copia vieja).
Pasos correctos desde cero:
cd $HOME\Desktop
git clone https://github.com/Capybla/Paraweather.git
cd Paraweather
git pull
cd frontend
$env:GITHUB_TOKEN="<token_con_repo_y_actions>"
$env:GITHUB_REPO="Capybla/Paraweather"
$env:GITHUB_REF="main"
npm install
npm run apk:trigger:githubSi ya tienes el repo clonado en otra ruta, entra a esa carpeta primero:
cd "C:\ruta\donde\tengas\Paraweather\frontend"
npm runEn la salida de npm run debe aparecer apk:trigger:github.
Qué hace:
- Llama a la API de GitHub (
workflow_dispatch) del workflow.github/workflows/android-apk.yml. - Inicia la build en GitHub Actions para generar la APK.
Alternativa sin npm (disparo directo de API desde PowerShell):
$headers = @{
Authorization = "Bearer $env:GITHUB_TOKEN"
Accept = "application/vnd.github+json"
"X-GitHub-Api-Version" = "2022-11-28"
}
$body = @{ ref = "main" } | ConvertTo-Json
Invoke-RestMethod -Method POST -Uri "https://api.github.com/repos/Capybla/Paraweather/actions/workflows/android-apk.yml/dispatches" -Headers $headers -Body $bodySi todo va bien, GitHub responde sin contenido (HTTP 204) y la ejecución aparece en Actions.
Luego descárgala desde:
- Actions artifacts:
paraweather-debug-apk - Releases (si disparas por tag
v*)
- La app guarda el último parte meteorológico y lo muestra cuando no hay red.
- Se muestra alerta de desconexión y se mantiene navegación con GPS local.
- En build de producción se registra un service worker para cachear recursos base.
frontend/src/App.js: UI principal y lógica de widgets.frontend/src/config.js: valores por defecto de páginas/widgets y claves de almacenamiento (punto recomendado para personalización).frontend/src/serviceWorkerRegistration.js+frontend/public/sw.js: estrategia offline/cache.backend/server.py: API y lógica de reglas de vuelo.
- Haz cambios pequeños y atómicos por PR.
- Mantén configuraciones editables en archivos de configuración (ejemplo:
frontend/src/config.js) en lugar de hardcodear en componentes. - Verifica siempre con:
cd frontend && node --check src/App.jscd frontend && npm run build
- Puedes definir
REACT_APP_REPO_URLpara que el panel Open Source de la UI apunte a tu repositorio real en GitHub/GitLab. - El diseño está pensado para ser profesional y reusable: componentes visuales y configuración separada en
frontend/src/App.js+frontend/src/config.js.