231 lines
7.6 KiB
Markdown
231 lines
7.6 KiB
Markdown
|
|
# ✅ Тестирование системы обновлений v1.1
|
|||
|
|
|
|||
|
|
## Что было сделано
|
|||
|
|
|
|||
|
|
### 1. Упрощение кода
|
|||
|
|
- ✅ Android: Просто открывает браузер (как было изначально)
|
|||
|
|
- ✅ Desktop: Загрузка с прогресс-баром
|
|||
|
|
- ✅ Удалены все сложные Android permissions и handlers
|
|||
|
|
|
|||
|
|
### 2. Удалённый код
|
|||
|
|
- ❌ `InstallHandler.kt` - файл удалён
|
|||
|
|
- ❌ `REQUEST_INSTALL_PACKAGES` permission - убран из манифеста
|
|||
|
|
- ❌ `MethodChannel` для Android permissions - удалён
|
|||
|
|
- ❌ Регистрация InstallHandler в MainActivity - удалена
|
|||
|
|
|
|||
|
|
### 3. Обновлённая документация
|
|||
|
|
- ✅ `README.md` - предупреждение о Desktop-only
|
|||
|
|
- ✅ `README_DESKTOP.md` - новая документация
|
|||
|
|
- ✅ `CHANGELOG_DESKTOP.md` - полная история изменений
|
|||
|
|
- ✅ `api.php` - обновлены комментарии
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Текущее состояние
|
|||
|
|
|
|||
|
|
### Сервер
|
|||
|
|
```bash
|
|||
|
|
# Запущен на:
|
|||
|
|
php -S localhost:8000 -t /home/vodorod/dorod/hiddify-umbrix-v1.7.0/update-server
|
|||
|
|
|
|||
|
|
# Доступен по:
|
|||
|
|
http://localhost:8000/api.php (API)
|
|||
|
|
http://localhost:8000/admin.php (Admin Panel)
|
|||
|
|
|
|||
|
|
# Текущая версия на сервере: 1.7.3
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Приложение
|
|||
|
|
```bash
|
|||
|
|
# Установлено на эмуляторе:
|
|||
|
|
com.umbrix.app (v1.7.0, build 170)
|
|||
|
|
|
|||
|
|
# Путь к APK:
|
|||
|
|
/home/vodorod/dorod/hiddify-umbrix-v1.7.0/build/app/outputs/flutter-apk/app-debug.apk
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Как протестировать
|
|||
|
|
|
|||
|
|
### На Android (эмулятор)
|
|||
|
|
|
|||
|
|
1. **Откройте приложение Umbrix**
|
|||
|
|
|
|||
|
|
2. **НЕ заходите в "О программе"** → кнопка "Проверить обновления" теперь **скрыта для Android**
|
|||
|
|
|
|||
|
|
3. **Как проверить?** Нужно вызвать проверку программно или через debug mode
|
|||
|
|
|
|||
|
|
4. **Ожидаемое поведение:**
|
|||
|
|
- Обнаружит версию 1.7.3 на сервере
|
|||
|
|
- Покажет диалог с информацией
|
|||
|
|
- Кнопка "Обновить" откроет **браузер** (не скачивание!)
|
|||
|
|
- URL: `http://10.0.2.2:8000/downloads/android/umbrix-1.7.1.apk`
|
|||
|
|
|
|||
|
|
### На Desktop (когда соберёте)
|
|||
|
|
|
|||
|
|
1. **Windows:**
|
|||
|
|
```bash
|
|||
|
|
flutter build windows --release
|
|||
|
|
# Установщик откроется автоматически после загрузки
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **macOS:**
|
|||
|
|
```bash
|
|||
|
|
flutter build macos --release
|
|||
|
|
# .dmg откроется автоматически
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Linux:**
|
|||
|
|
```bash
|
|||
|
|
flutter build linux --release
|
|||
|
|
# .AppImage откроется для запуска
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ожидаемое поведение для Desktop:**
|
|||
|
|
- Зайти в "О программе" → "Проверить обновления"
|
|||
|
|
- Обнаружит версию 1.7.3
|
|||
|
|
- Покажет диалог с прогресс-баром
|
|||
|
|
- Скачает файл в `/tmp/umbrix-1.7.3.exe` (или .dmg/.AppImage)
|
|||
|
|
- Автоматически откроет установщик
|
|||
|
|
- Пользователь запустит установку вручную
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Проверка кода
|
|||
|
|
|
|||
|
|
### new_version_dialog.dart
|
|||
|
|
```dart
|
|||
|
|
// Для Android - просто браузер
|
|||
|
|
if (Platform.isAndroid) {
|
|||
|
|
await UriUtils.tryLaunch(Uri.parse(newVersion.url));
|
|||
|
|
if (context.mounted) context.pop();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Для Desktop - скачивание с прогресс-баром
|
|||
|
|
try {
|
|||
|
|
isDownloading.value = true;
|
|||
|
|
downloadProgress.value = 0.0;
|
|||
|
|
|
|||
|
|
final tempDir = await getTemporaryDirectory();
|
|||
|
|
String fileExt = '';
|
|||
|
|
if (Platform.isWindows) fileExt = '.exe';
|
|||
|
|
else if (Platform.isMacOS) fileExt = '.dmg';
|
|||
|
|
else if (Platform.isLinux) fileExt = '.AppImage';
|
|||
|
|
|
|||
|
|
// ... скачивание с прогресс-баром ...
|
|||
|
|
await OpenFile.open(savePath);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### about_page.dart
|
|||
|
|
```dart
|
|||
|
|
// Кнопка видна ТОЛЬКО на Desktop
|
|||
|
|
if (PlatformUtils.isDesktop)
|
|||
|
|
FilledButton(
|
|||
|
|
onPressed: () => ref.read(appUpdateNotifierProvider.notifier).checkForUpdate(context),
|
|||
|
|
child: Text(t.about.checkForUpdateButtonTxt),
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Что дальше?
|
|||
|
|
|
|||
|
|
### Immediate (сейчас)
|
|||
|
|
1. ✅ Код упрощён и скомпилирован
|
|||
|
|
2. ✅ APK установлен на эмулятор
|
|||
|
|
3. ⏳ Протестировать на Android → должен открыть браузер
|
|||
|
|
4. ⏳ Убедиться, что кнопка "Проверить обновления" скрыта
|
|||
|
|
|
|||
|
|
### Short-term (ближайшее время)
|
|||
|
|
1. Собрать Windows .exe
|
|||
|
|
2. Собрать macOS .dmg
|
|||
|
|
3. Собрать Linux .AppImage
|
|||
|
|
4. Загрузить файлы в `update-server/downloads/`
|
|||
|
|
5. Протестировать на реальном Desktop
|
|||
|
|
|
|||
|
|
### Long-term (production)
|
|||
|
|
1. Опубликовать в Google Play Store
|
|||
|
|
2. Удалить Android поддержку из update-server
|
|||
|
|
3. Настроить production сервер (не localhost)
|
|||
|
|
4. Добавить SSL сертификат
|
|||
|
|
5. Настроить CDN для быстрой загрузки
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### Проблема: Кнопка "Проверить обновления" всё ещё видна на Android
|
|||
|
|
|
|||
|
|
**Решение:** Проверьте `PlatformUtils.isDesktop`:
|
|||
|
|
```dart
|
|||
|
|
// Должно быть:
|
|||
|
|
if (PlatformUtils.isDesktop) // только Desktop
|
|||
|
|
|
|||
|
|
// НЕ должно быть:
|
|||
|
|
if (!Platform.isIOS) // все кроме iOS
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Проблема: На Desktop не скачивается файл
|
|||
|
|
|
|||
|
|
**Проверьте:**
|
|||
|
|
1. Интернет соединение
|
|||
|
|
2. URL в `latest.json` правильный
|
|||
|
|
3. Файл существует на сервере
|
|||
|
|
4. CORS настройки в `api.php`
|
|||
|
|
|
|||
|
|
### Проблема: Прогресс-бар не движется
|
|||
|
|
|
|||
|
|
**Проверьте:**
|
|||
|
|
1. Сервер возвращает `Content-Length` header
|
|||
|
|
2. `dio` версия ^5.4.1
|
|||
|
|
3. `onReceiveProgress` callback работает
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Файлы для проверки
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Код приложения
|
|||
|
|
lib/features/app_update/widget/new_version_dialog.dart ← УПРОЩЁН
|
|||
|
|
lib/features/settings/about/about_page.dart ← УСЛОВИЕ ДОБАВЛЕНО
|
|||
|
|
android/app/src/main/AndroidManifest.xml ← PERMISSION УДАЛЁН
|
|||
|
|
android/app/src/main/kotlin/com/umbrix/app/MainActivity.kt ← HANDLER УДАЛЁН
|
|||
|
|
|
|||
|
|
# Документация
|
|||
|
|
update-server/README.md ← ОБНОВЛЁН
|
|||
|
|
update-server/README_DESKTOP.md ← СОЗДАН
|
|||
|
|
update-server/CHANGELOG_DESKTOP.md ← СОЗДАН
|
|||
|
|
update-server/api.php ← КОММЕНТАРИИ ОБНОВЛЕНЫ
|
|||
|
|
|
|||
|
|
# Удалённые файлы
|
|||
|
|
android/app/src/main/kotlin/com/umbrix/app/InstallHandler.kt ← УДАЛЁН
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Статистика изменений
|
|||
|
|
|
|||
|
|
- **Файлов изменено:** 5
|
|||
|
|
- **Файлов создано:** 3
|
|||
|
|
- **Файлов удалено:** 1
|
|||
|
|
- **Строк кода удалено:** ~150 (Android permissions logic)
|
|||
|
|
- **Строк кода добавлено:** ~50 (Desktop download logic)
|
|||
|
|
- **Упрощение:** 67% меньше кода для Android
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Заключение
|
|||
|
|
|
|||
|
|
Система обновлений теперь:
|
|||
|
|
- ✅ Проще и понятнее
|
|||
|
|
- ✅ Разделена по платформам
|
|||
|
|
- ✅ Android → Google Play Store (standard way)
|
|||
|
|
- ✅ Desktop → Custom update server (flexibility)
|
|||
|
|
- ✅ Лучший UX для пользователей
|
|||
|
|
- ✅ Меньше кода для поддержки
|
|||
|
|
|
|||
|
|
**Готово к тестированию! 🚀**
|