Add v9.0: Auto-update system with Gitea integration

- Implement UpdateManager to check Gitea releases for new versions
- Add update dialogs with mandatory/optional update support
- Integrate DownloadManager for APK downloads
- Add FileProvider configuration for app installation
- Support update-manifest.json for version control enforcement
- Add comprehensive update strings and error handling
- Include gradlew executable permissions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
renato97
2025-11-23 21:14:14 +01:00
parent d2d66a7906
commit cf11aa04bc
9 changed files with 746 additions and 5 deletions

View File

@@ -82,6 +82,44 @@ chmod +x build_apk.sh
./build_apk.sh
```
## 🔄 Control de Instalaciones y Actualizaciones
StreamPlayer ahora consulta automáticamente las releases públicas del repositorio Gitea y puede forzar o sugerir actualizaciones directamente desde la app. Para aprovecharlo:
1. Ejecuta un build nuevo incrementando `versionCode`/`versionName` en `app/build.gradle`.
2. Crea una release en Gitea asignando un tag como `v9.1` y sube el APK.
3. Adjunta un archivo `update-manifest.json` en la misma release (puedes partir de `release/update-manifest.example.json`).
### Formato de `update-manifest.json`
```json
{
"versionCode": 91000,
"versionName": "9.1.0",
"minSupportedVersionCode": 90000,
"forceUpdate": false,
"downloadUrl": "https://gitea.cbcren.online/renato97/app/releases/download/v9.1/StreamPlayer-v9.1.apk",
"fileName": "StreamPlayer-v9.1.apk",
"sizeBytes": 12345678,
"notes": "Novedades destacadas que aparecerán en el diálogo dentro de la app"
}
```
- `versionCode` / `versionName`: deben coincidir con el APK publicado.
- `minSupportedVersionCode`: define desde qué versión mínima se permite seguir usando la app (ideal para bloquear instalaciones antiguas).
- `forceUpdate`: si es `true` la app mostrará un diálogo sin opción de omitir.
- `downloadUrl` / `fileName`: apuntan al asset `.apk` publicado en Gitea (puede ser el enlace de descarga directo).
- `notes`: texto libre mostrado en el diálogo dentro de la app; si lo omitís se usará el cuerpo de la release.
Si por algún motivo olvidas subir el manifiesto, la app igualmente tomará el primer asset `.apk` de la release, pero no podrá forzar versiones mínimas.
### Flujo dentro de la app
- Cada vez que se abre `MainActivity` se consulta `https://gitea.cbcren.online/api/v1/repos/renato97/app/releases/latest`.
- Si `versionCode` del servidor es mayor al instalado se muestra un diálogo para actualizar; el usuario puede abrir la release o descargarla directamente.
- Si `minSupportedVersionCode` es mayor al instalado la app bloqueará el uso hasta actualizar, cumpliendo con el requerimiento de controlar instalaciones.
- La descarga se gestiona con `DownloadManager` y, una vez completada, se lanza el instalador usando FileProvider.
## 📱 Estructura del Proyecto
```
@@ -146,8 +184,8 @@ String[] GOOGLE_DNS = {"8.8.8.8", "8.8.4.4"};
| `applicationId` | `com.streamplayer` |
| `minSdk` | 21 |
| `targetSdk` | 33 |
| `versionCode` | 1 |
| `versionName` | "1.0" |
| `versionCode` | 90000 |
| `versionName` | "9.0.0" |
| `compileSdk` | 33 |
## 🔐 Permisos y Seguridad
@@ -217,4 +255,4 @@ Para soporte y preguntas:
---
**🔗 Repositorio**: https://gitea.cbcren.online/renato97/app
**🔗 Repositorio**: https://gitea.cbcren.online/renato97/app