307 lines
10 KiB
Markdown
307 lines
10 KiB
Markdown
|
|
# 📋 Аудит проекта Umbrix v0.1.0 (build 100)
|
|||
|
|
|
|||
|
|
**Дата:** 29 декабря 2025 г.
|
|||
|
|
**Flutter:** 3.24.0 (Stable)
|
|||
|
|
**Платформа:** Android SDK 36.1.0
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Статус сборки
|
|||
|
|
|
|||
|
|
### 🎯 Успешно собрано
|
|||
|
|
- **APK:** `build/app/outputs/flutter-apk/app-debug.apk`
|
|||
|
|
- **Размер:** 223 MB (debug-режим с символами отладки)
|
|||
|
|
- **Время сборки:** 11.4s (Gradle)
|
|||
|
|
- **Bootstrap:** 2358ms
|
|||
|
|
- **Статус:** ✅ Приложение запущено и работает на эмуляторе
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Статический анализ кода (Flutter Analyze)
|
|||
|
|
|
|||
|
|
### Общая статистика
|
|||
|
|
- **Всего проблем:** 265
|
|||
|
|
- **Категории:**
|
|||
|
|
- ❌ **Errors:** 0 (критических ошибок нет)
|
|||
|
|
- ⚠️ **Warnings:** ~30 (неиспользуемые импорты, мёртвый код)
|
|||
|
|
- ℹ️ **Info/Hints:** ~235 (стилистика, рекомендации)
|
|||
|
|
|
|||
|
|
### Основные проблемы
|
|||
|
|
|
|||
|
|
#### ⚠️ Warnings (требуют внимания):
|
|||
|
|
1. **Неиспользуемые импорты** (20+ файлов):
|
|||
|
|
- `lib/features/per_app_proxy/overview/per_app_proxy_page.dart:5` - `go_router`
|
|||
|
|
- `lib/features/home/widget/home_page.dart:15` - `active_proxy_notifier.dart`
|
|||
|
|
- `lib/features/settings/widgets/advanced_setting_tiles.dart` - 3 импорта
|
|||
|
|
- И другие...
|
|||
|
|
|
|||
|
|
2. **Неиспользуемые переменные**:
|
|||
|
|
- `connection_button.dart:31` - `today`
|
|||
|
|
- `system_tray_notifier.dart:64` - `destinations`
|
|||
|
|
- `logs_overview_page.dart:31` - `debug`
|
|||
|
|
- `about_page.dart:28` - `appUpdate`
|
|||
|
|
- И другие...
|
|||
|
|
|
|||
|
|
3. **Мёртвый код (Dead code)**:
|
|||
|
|
- `profile_notifier.dart:117` - `false && ...` (всегда false)
|
|||
|
|
- `qr_code_scanner_screen.dart:143` - недостижимый код
|
|||
|
|
- `system_tray_notifier.dart:184` - недостижимый код
|
|||
|
|
|
|||
|
|
4. **Go lang warning**:
|
|||
|
|
- `libcore/config/server.go:46` - impossible condition: `nil != nil`
|
|||
|
|
|
|||
|
|
#### ℹ️ Info (рекомендации по стилю):
|
|||
|
|
- Отсутствие `const` конструкторов (~100 мест)
|
|||
|
|
- Отсутствие trailing commas (~50 мест)
|
|||
|
|
- Использование deprecated API (~10 мест)
|
|||
|
|
- Generated код (protobuf) - игнорируется
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📦 Зависимости
|
|||
|
|
|
|||
|
|
### Устаревшие пакеты (требующие обновления):
|
|||
|
|
|
|||
|
|
#### Критичные (серьёзно устарели):
|
|||
|
|
- `flutter_adaptive_scaffold`: 0.1.12 → **0.3.3+1** (discontinued! ⚠️)
|
|||
|
|
- `go_router`: 13.2.5 → **17.0.1** (+3 мажорные версии)
|
|||
|
|
- `grpc`: 3.2.4 → **5.1.0** (+2 мажорные версии)
|
|||
|
|
- `hooks_riverpod`: 2.6.1 → **3.1.0**
|
|||
|
|
- `freezed_annotation`: 2.4.4 → **3.1.0**
|
|||
|
|
- `riverpod_annotation`: 2.6.1 → **4.0.0**
|
|||
|
|
- `protobuf`: 3.1.0 → **6.0.0** (+3 мажорные версии)
|
|||
|
|
|
|||
|
|
#### Рекомендуемые к обновлению:
|
|||
|
|
- `mobile_scanner`: 5.2.3 → 7.1.4
|
|||
|
|
- `package_info_plus`: 5.0.1 → 9.0.0
|
|||
|
|
- `sentry_flutter`: 7.20.2 → 9.9.1
|
|||
|
|
- `share_plus`: 7.2.2 → 12.0.1
|
|||
|
|
- `slang`: 3.32.0 → 4.11.1
|
|||
|
|
- `upgrader`: 9.0.0 → 12.3.0
|
|||
|
|
- `window_manager`: 0.3.9 → 0.5.1
|
|||
|
|
- `wolt_modal_sheet`: 0.4.1 → 0.11.0
|
|||
|
|
|
|||
|
|
#### Dev dependencies:
|
|||
|
|
- `build_runner`: 2.4.13 → 2.10.4
|
|||
|
|
- `dependency_validator`: 3.2.3 → 5.0.3
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 Конфигурация линтера
|
|||
|
|
|
|||
|
|
**Файл:** `analysis_options.yaml`
|
|||
|
|
|
|||
|
|
### Используемые плагины:
|
|||
|
|
- ✅ `package:lint/strict.yaml` (строгие правила)
|
|||
|
|
- ✅ `custom_lint` с `provider_parameters`
|
|||
|
|
|
|||
|
|
### Исключения:
|
|||
|
|
- `libcore/**` (Go код)
|
|||
|
|
- `**.g.dart` (сгенерированный код)
|
|||
|
|
- `lib/gen/**` (переводы)
|
|||
|
|
|
|||
|
|
### Отключенные правила:
|
|||
|
|
- `sort_pub_dependencies: false`
|
|||
|
|
- `sort_unnamed_constructors_first: false`
|
|||
|
|
- `avoid_classes_with_only_static_members: false`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🌍 Переводы (i18n)
|
|||
|
|
|
|||
|
|
### Статус: ✅ Полная локализация
|
|||
|
|
|
|||
|
|
**Поддерживаемые языки:** 11
|
|||
|
|
- 🇸🇦 ar (арабский)
|
|||
|
|
- 🇬🇧 en (английский - базовый)
|
|||
|
|
- 🇪🇸 es (испанский)
|
|||
|
|
- 🇮🇷 fa (персидский)
|
|||
|
|
- 🇫🇷 fr (французский)
|
|||
|
|
- 🇮🇩 id (индонезийский)
|
|||
|
|
- 🇧🇷 pt-BR (португальский)
|
|||
|
|
- 🇷🇺 ru (русский) ✨
|
|||
|
|
- 🇹🇷 tr (турецкий)
|
|||
|
|
- 🇨🇳 zh-CN (китайский упрощенный)
|
|||
|
|
- 🇹🇼 zh-TW (китайский традиционный)
|
|||
|
|
|
|||
|
|
**Генератор:** slang v3.32.0 (можно обновить до 4.11.1)
|
|||
|
|
**Время генерации:** 0.229s
|
|||
|
|
**Статус:** Все ключи переведены, включая:
|
|||
|
|
- ✅ `excludedDomains` (добавлены для id, pt-BR, zh-TW в этой сессии)
|
|||
|
|
- ✅ `proxies.pageTitle` изменено с "Proxies" на "Locations" во всех языках
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🛠️ Flutter Doctor
|
|||
|
|
|
|||
|
|
### ✅ Работающие компоненты:
|
|||
|
|
- Flutter SDK 3.24.0 (stable)
|
|||
|
|
- Android toolchain SDK 36.1.0
|
|||
|
|
- Android Studio 2025.1.3
|
|||
|
|
- VS Code 1.106.3 / 1.108.0-insider
|
|||
|
|
- Connected devices (2)
|
|||
|
|
- Network resources
|
|||
|
|
|
|||
|
|
### ❌ Отсутствующие (для полной поддержки):
|
|||
|
|
- Chrome (для web-разработки)
|
|||
|
|
- Linux toolchain (clang++, CMake, ninja)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Git Status
|
|||
|
|
|
|||
|
|
### Изменённые файлы:
|
|||
|
|
- `.gitignore`
|
|||
|
|
- `android/app/build.gradle`
|
|||
|
|
- `android/app/src/main/AndroidManifest.xml`
|
|||
|
|
|
|||
|
|
### Удалённые файлы (ребрендинг):
|
|||
|
|
- Старый пакет: `com.hiddify.hiddify`
|
|||
|
|
- Новый пакет: `com.umbrix.app`
|
|||
|
|
- Удалено ~50 Kotlin файлов из старого namespace
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 UI Изменения (текущая сессия)
|
|||
|
|
|
|||
|
|
1. **Размер шрифта:**
|
|||
|
|
- Description: 12px (было: default)
|
|||
|
|
- Buttons: 13px (было: default)
|
|||
|
|
- Цель: уместить русский текст в одну строку
|
|||
|
|
|
|||
|
|
2. **Переводы:**
|
|||
|
|
- Кнопка "Proxies" → "Локации" (все языки)
|
|||
|
|
- Добавлен раздел "Exclusions" для id, pt-BR, zh-TW
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Рекомендации
|
|||
|
|
|
|||
|
|
### 🔴 Критично (сделать в ближайшее время):
|
|||
|
|
|
|||
|
|
1. **Удалить неиспользуемые импорты:**
|
|||
|
|
```bash
|
|||
|
|
dart fix --apply
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Обновить discontinued пакет:**
|
|||
|
|
- Заменить `flutter_adaptive_scaffold` на актуальную альтернативу
|
|||
|
|
|
|||
|
|
3. **Исправить мёртвый код:**
|
|||
|
|
- `profile_notifier.dart:117` - убрать `false &&`
|
|||
|
|
- Другие dead code warnings
|
|||
|
|
|
|||
|
|
### 🟡 Важно (планировать):
|
|||
|
|
|
|||
|
|
4. **Major updates пакетов:**
|
|||
|
|
- Обновить Riverpod 2.x → 3.x (breaking changes!)
|
|||
|
|
- Обновить go_router 13.x → 17.x
|
|||
|
|
- Обновить protobuf 3.x → 6.x
|
|||
|
|
- Обновить grpc 3.x → 5.x
|
|||
|
|
|
|||
|
|
5. **Размер APK (223 MB):**
|
|||
|
|
- Создать release build для оптимизации
|
|||
|
|
- Проверить, нет ли лишних ресурсов
|
|||
|
|
- Использовать app bundle вместо APK
|
|||
|
|
|
|||
|
|
### 🟢 Желательно (улучшения):
|
|||
|
|
|
|||
|
|
6. **Добавить const конструкторы** (производительность)
|
|||
|
|
7. **Добавить trailing commas** (читаемость)
|
|||
|
|
8. **Обновить deprecated API:**
|
|||
|
|
- `AutoDisposeRef` → `Ref`
|
|||
|
|
- `SingboxServiceRef` → `Ref`
|
|||
|
|
- `package:drift_dev/api/migrations.dart`
|
|||
|
|
|
|||
|
|
9. **Linux support:**
|
|||
|
|
```bash
|
|||
|
|
sudo apt install clang cmake ninja-build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Плагины для проверки
|
|||
|
|
|
|||
|
|
### Уже используются:
|
|||
|
|
- ✅ `flutter analyze` (встроенный статический анализатор)
|
|||
|
|
- ✅ `custom_lint` (кастомные правила для Riverpod)
|
|||
|
|
- ✅ `package:lint/strict.yaml` (строгие правила)
|
|||
|
|
|
|||
|
|
### Рекомендуемые дополнительно:
|
|||
|
|
|
|||
|
|
1. **dart_code_metrics** (DCM)
|
|||
|
|
```yaml
|
|||
|
|
dev_dependencies:
|
|||
|
|
dart_code_metrics: ^5.7.6
|
|||
|
|
```
|
|||
|
|
- Циклическая сложность
|
|||
|
|
- Метрики кода
|
|||
|
|
- Anti-patterns
|
|||
|
|
|
|||
|
|
2. **flutter_lints**
|
|||
|
|
```yaml
|
|||
|
|
dev_dependencies:
|
|||
|
|
flutter_lints: ^4.0.0
|
|||
|
|
```
|
|||
|
|
- Более современная альтернатива lint
|
|||
|
|
|
|||
|
|
3. **very_good_analysis**
|
|||
|
|
```yaml
|
|||
|
|
dev_dependencies:
|
|||
|
|
very_good_analysis: ^5.1.0
|
|||
|
|
```
|
|||
|
|
- Еще более строгие правила от Very Good Ventures
|
|||
|
|
|
|||
|
|
4. **Dependency checkers:**
|
|||
|
|
```bash
|
|||
|
|
flutter pub run dependency_validator
|
|||
|
|
```
|
|||
|
|
- Проверка неиспользуемых зависимостей
|
|||
|
|
|
|||
|
|
5. **Security audit:**
|
|||
|
|
```bash
|
|||
|
|
flutter pub run pubspec_dependency_analyzer
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📈 Итоговая оценка
|
|||
|
|
|
|||
|
|
| Критерий | Оценка | Комментарий |
|
|||
|
|
|----------|--------|-------------|
|
|||
|
|
| **Сборка** | ✅ 10/10 | Собирается без ошибок |
|
|||
|
|
| **Код-стиль** | ⚠️ 6/10 | 265 замечаний, но нет критичных |
|
|||
|
|
| **Зависимости** | ⚠️ 5/10 | Много устаревших пакетов |
|
|||
|
|
| **Локализация** | ✅ 10/10 | 11 языков, все ключи переведены |
|
|||
|
|
| **Размер APK** | ⚠️ 6/10 | 223 MB (debug), нужен release |
|
|||
|
|
| **Тесты** | ❓ N/A | Требует проверки |
|
|||
|
|
| **Документация** | ✅ 8/10 | README есть, можно улучшить |
|
|||
|
|
|
|||
|
|
### Общая оценка: ⚠️ 7.5/10
|
|||
|
|
|
|||
|
|
**Вывод:** Проект в хорошем состоянии, основные проблемы - устаревшие зависимости и стилистические замечания линтера. Критических ошибок нет, приложение работает стабильно.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 План действий
|
|||
|
|
|
|||
|
|
### Этап 1 (Немедленно):
|
|||
|
|
- [ ] Запустить `dart fix --apply`
|
|||
|
|
- [ ] Удалить неиспользуемые импорты вручную
|
|||
|
|
- [ ] Исправить dead code
|
|||
|
|
|
|||
|
|
### Этап 2 (На этой неделе):
|
|||
|
|
- [ ] Собрать release APK
|
|||
|
|
- [ ] Проверить размер release build
|
|||
|
|
- [ ] Обновить minor версии пакетов
|
|||
|
|
|
|||
|
|
### Этап 3 (Планирование):
|
|||
|
|
- [ ] Протестировать major updates
|
|||
|
|
- [ ] Заменить discontinued пакеты
|
|||
|
|
- [ ] Добавить DCM метрики
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Отчёт сгенерирован:** GitHub Copilot
|
|||
|
|
**Версия приложения:** Umbrix v0.1.0 (100)
|