Changes: - AndroidManifest.xml: Added all required permissions - Network: INTERNET, ACCESS_NETWORK_STATE - Media: CAMERA, RECORD_AUDIO - Location: ACCESS_FINE/COARSE_LOCATION - Storage: READ_MEDIA_* (Android 13+), READ_EXTERNAL_STORAGE (≤12) - Added android:usesCleartextTraffic=true for HTTP - Added docs/BUILD-v1.7.4.md with full build report - Added CHANGELOG.md Build: Flutter 3.38.5 / Dart 3.10.4 / Java 17 APK: 49MB | SHA-256: 7f57bee3edec...
4.3 KiB
4.3 KiB
Packet v1.7.4 - Build Report
Fecha: 2025-12-23
Compilado por: Claude Code
Plataforma: macOS Darwin 25.1.0
Artefacto
| Campo | Valor |
|---|---|
| Archivo | packet-v1.7.4.apk |
| Tamaño | 49 MB |
| SHA-256 | 7f57bee3edec7342d6ca78d789704fec3827e3bf85f11ac362dcbacc8371ef1a |
| Firmado | Debug keys |
Entorno de Compilación
Flutter
| Componente | Versión |
|---|---|
| Flutter | 3.38.5 (stable) |
| Dart | 3.10.4 |
| DevTools | 2.51.1 |
| Engine | c108a94d7a |
Android
| Componente | Valor |
|---|---|
| Java | OpenJDK 17.0.17 |
| Package Name | me.tzzr.packet |
| Label | packet |
Permisos Android
<!-- Network -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Camera and Audio -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- Location -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- Media (Android 13+ / API 33+) -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<!-- Storage (Android 12 and below) -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32"/>
Configuración adicional:
<application android:usesCleartextTraffic="true">
Dependencias
Runtime
| Paquete | Versión | Propósito |
|---|---|---|
| flutter_bloc | ^9.0.0 | State management |
| equatable | ^2.0.7 | Value equality |
| sqflite | ^2.4.2 | SQLite local DB |
| path_provider | ^2.1.5 | File paths |
| dio | ^5.7.0 | HTTP client |
| crypto | ^3.0.6 | SHA-256 hashing |
| image_picker | ^1.1.2 | Captura fotos/video |
| record | ^6.0.0 | Grabación audio |
| file_picker | ^8.1.7 | Selección archivos |
| geolocator | ^13.0.2 | GPS location |
| permission_handler | ^11.4.0 | Runtime permissions |
| uuid | ^4.5.1 | UUID generation |
| intl | ^0.20.2 | Internacionalización |
| cached_network_image | ^3.4.1 | Cache de imágenes |
Dev
| Paquete | Versión |
|---|---|
| flutter_test | SDK |
| flutter_lints | ^6.0.0 |
Estructura del Proyecto
lib/ (3,505 líneas Dart)
├── main.dart # Entry point
├── core/
│ ├── constants/ # AppConstants, RetryDelays
│ ├── errors/ # Excepciones
│ ├── utils/ # hash_utils, retry_utils
│ └── theme/ # AppTheme
├── data/
│ ├── datasources/ # BackendApi, BibliotecaApi, LocalDatabase
│ └── repositories/ # Config, Etiqueta, Contenedor repos
├── domain/
│ └── entities/ # Contenedor, Etiqueta, Pack, Destino
└── presentation/
├── app.dart # PacketApp, MainScreen
├── bloc/ # Cubits
├── pages/ # 5 pantallas
└── widgets/ # Componentes
Pantallas
| # | Pantalla | Icono | Función |
|---|---|---|---|
| 1 | Captura | 📷 | Montar contenedor multimedia |
| 2 | Etiquetas | 🏷️ | Seleccionar tags |
| 3 | Packs | 📦 | Conjuntos de etiquetas |
| 4 | Pendientes | ⏳ | Cola de reintentos (máx 20) |
| 5 | Config | ⚙️ | URLs, llaves, bibliotecas |
Constantes
| Constante | Valor |
|---|---|
| maxPendientes | 20 |
| maxReintentos | 20 |
| hashLength | 64 (SHA-256) |
| chunkSize | 512 KB |
| httpTimeout | 30s |
| retryCheckInterval | 30s |
Backoff de Reintentos (72h total)
| Rango | Espera |
|---|---|
| 1-3 | 1, 2, 5 min |
| 4-6 | 10, 20, 30 min |
| 7-10 | 1, 2, 3, 4 h |
| 11-14 | 5, 6, 6, 6 h |
| 15-19 | 8, 8, 8, 8, 6 h |
| 20 | STOP |
Comandos de Build
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
cd /tmp/packet-app
flutter clean
flutter build apk --release
cp build/app/outputs/flutter-apk/app-release.apk ~/Downloads/packet-v1.7.4.apk