v1.7.4 - Android permissions and build documentation
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...
This commit is contained in:
32
CHANGELOG.md
Normal file
32
CHANGELOG.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [1.7.4] - 2025-12-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Permisos completos de Android en AndroidManifest.xml:
|
||||||
|
- INTERNET, ACCESS_NETWORK_STATE
|
||||||
|
- CAMERA, RECORD_AUDIO
|
||||||
|
- ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION
|
||||||
|
- READ_MEDIA_IMAGES/VIDEO/AUDIO (Android 13+)
|
||||||
|
- READ_EXTERNAL_STORAGE (Android ≤12)
|
||||||
|
- Configuración `android:usesCleartextTraffic="true"` para HTTP
|
||||||
|
|
||||||
|
### Build Info
|
||||||
|
- Flutter 3.38.5 (stable)
|
||||||
|
- Dart 3.10.4
|
||||||
|
- Java OpenJDK 17.0.17
|
||||||
|
- APK Size: 49 MB
|
||||||
|
- SHA-256: `7f57bee3edec7342d6ca78d789704fec3827e3bf85f11ac362dcbacc8371ef1a`
|
||||||
|
|
||||||
|
## [1.0.0] - 2025-12-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Release inicial
|
||||||
|
- 5 pantallas: Captura, Etiquetas, Packs, Pendientes, Config
|
||||||
|
- Arquitectura Clean con BLoC
|
||||||
|
- Soporte offline con cola de reintentos
|
||||||
|
- Integración con backend via API REST
|
||||||
|
- Sistema de etiquetas desde bibliotecas remotas
|
||||||
|
- Captura multimedia (fotos, video, audio, archivos)
|
||||||
|
- GPS location
|
||||||
|
- Hash SHA-256 para contenedores
|
||||||
@@ -1,8 +1,29 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<!-- Network permissions -->
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
|
||||||
|
<!-- Camera and audio permissions -->
|
||||||
|
<uses-permission android:name="android.permission.CAMERA"/>
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||||
|
|
||||||
|
<!-- Location permissions -->
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||||
|
|
||||||
|
<!-- Media permissions for 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 permission for Android 12 and below -->
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="packet"
|
android:label="packet"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:usesCleartextTraffic="true">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
@@ -12,10 +33,6 @@
|
|||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
||||||
the Android process has started. This theme is visible to the user
|
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
|
||||||
to determine the Window background behind the Flutter UI. -->
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme"
|
||||||
@@ -25,17 +42,10 @@
|
|||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
</application>
|
</application>
|
||||||
<!-- Required to query activities that can process text, see:
|
|
||||||
https://developer.android.com/training/package-visibility and
|
|
||||||
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
|
|
||||||
|
|
||||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||||
|
|||||||
151
docs/BUILD-v1.7.4.md
Normal file
151
docs/BUILD-v1.7.4.md
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<!-- 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:**
|
||||||
|
```xml
|
||||||
|
<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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user