Files
umbrix/update-server/CHANGELOG_DESKTOP.md
Umbrix Developer 76a374950f feat: mobile-like window size and always-visible stats
- Changed window size to mobile phone format (400x800)
- Removed width condition for ActiveProxyFooter - now always visible
- Added run-umbrix.sh launch script with icon copying
- Stats cards now display on all screen sizes
2026-01-17 13:09:20 +03:00

8.4 KiB
Raw Permalink Blame History

История изменений системы обновлений

Версия 1.1 - Упрощение и Desktop-фокус

Дата: 2024

🎯 Главное изменение

Система обновлений переориентирована только на Desktop платформы (Windows, macOS, Linux).
Android версия использует Google Play Store для автоматических обновлений.


Что изменилось

Код приложения

  1. new_version_dialog.dart - Упрощён:

    • Android: Открывает браузер/Google Play
    • Desktop: Скачивание с прогресс-баром + автозапуск установщика
    • Удалены: Android permissions, MethodChannel, InstallHandler
  2. about_page.dart:

    • Кнопка "Проверить обновления" видна только на Desktop
    • Android не показывает кнопку (обновления через Google Play)
  3. Android код удалён:

    • InstallHandler.kt - удалён
    • REQUEST_INSTALL_PACKAGES permission - удалён из манифеста
    • Регистрация InstallHandler в MainActivity - удалена

Документация

  1. README.md - Обновлён:

    • Добавлено предупреждение о Desktop-only
    • Изменена диаграмма процесса обновления
    • Добавлены ссылки на Google Play для Android
  2. README_DESKTOP.md - Создан:

    • Подробная инструкция для Desktop платформ
    • Структура файлов (.exe, .dmg, .AppImage)
    • Примеры конфигурации
  3. api.php - Обновлён комментарий:

    • Указано, что API только для Desktop
    • Упомянуто использование Google Play для Android

🧹 Что почистили

Удалённые файлы

  • android/app/src/main/kotlin/com/umbrix/app/InstallHandler.kt

Удалённые permissions

  • android.permission.REQUEST_INSTALL_PACKAGES из AndroidManifest.xml

Удалённый код

  • MethodChannel для проверки Android permissions
  • Функции checkInstallPermission(), requestInstallPermission()
  • Сложная логика установки APK из приложения

📦 Зависимости

Используемые пакеты только для Desktop:

  • dio ^5.4.1 - HTTP запросы и загрузка файлов
  • path_provider ^2.1.1 - Временная директория для загрузок
  • open_file ^3.3.2 - Открытие установщика после загрузки

Android теперь использует только:

  • UriUtils.tryLaunch() - Открытие браузера/Google Play

🔄 Логика работы

Desktop (Windows/macOS/Linux)

if (Platform.isWindows || Platform.isMacOS || Platform.isLinux) {
  // 1. Проверка обновлений на сервере
  // 2. Показ диалога с информацией о версии
  // 3. Скачивание с прогресс-баром (dio)
  // 4. Сохранение в temp директорию
  // 5. Автоматический запуск установщика (open_file)
}

Android

if (Platform.isAndroid) {
  // 1. Проверка обновлений НЕ показывается (кнопка скрыта)
  // 2. В production: прямая ссылка на Google Play
  // 3. В debug: открытие браузера с download_url
}

🚀 Дальнейшие планы

Production деплой

  1. Windows:

    • Создание .exe установщика
    • Подпись сертификатом
    • Загрузка в downloads/windows/
  2. macOS:

    • Создание .dmg образа
    • Нотаризация Apple
    • Загрузка в downloads/macos/
  3. Linux:

    • Создание .AppImage
    • Добавление .deb / .rpm пакетов
    • Загрузка в downloads/linux/
  4. Android:

    • Публикация в Google Play Store
    • Удаление кастомного сервера обновлений
    • Автоматические обновления через магазин

💡 Почему так?

Проблема: Android требует сложные разрешения для установки APK из приложения:

  • Нужен REQUEST_INSTALL_PACKAGES permission
  • Пользователь должен вручную дать разрешение в настройках
  • Это запутывает пользователей и выглядит нелогично

Решение:

  • Android → Google Play Store (стандартный путь)
  • Desktop → Собственный сервер обновлений (гибкость и контроль)

📝 Заметки разработчика

"как то нелогично . но мы же его установили уже ... на андроид может и не надо такое обновление на exe надо будет"

Было принято решение упростить систему:

  • На Android слишком сложно и нелогично обновлять APK изнутри приложения
  • Google Play Store делает это автоматически и безопасно
  • Desktop платформам нужна эта функция, так как нет централизованного магазина
  • Разделение платформ упрощает код и улучшает UX

Версия 1.0 - Первый релиз

Дата: 2024

  • PHP API для проверки обновлений
  • Web-панель администратора
  • История версий
  • Поддержка beta/stable релизов
  • CORS настройки
  • Rate limiting
  • Логирование запросов
  • Интеграция с Flutter приложением

Проблемы версии 1.0:

  • Пыталась поддерживать Android с установкой APK
  • Требовала сложные Android permissions
  • Запутанная UX для пользователей Android

Миграция с 1.0 на 1.1

Для разработчиков

  1. Обновите код приложения (Flutter):

    git pull
    flutter pub get
    flutter build apk --debug  # для тестирования
    
  2. Удалите старый APK с устройства:

    adb uninstall com.umbrix.app
    
  3. Установите новую версию:

    adb install build/app/outputs/flutter-apk/app-debug.apk
    

Для сервера

Ничего менять не нужно! API осталось совместимым.
Просто обновите документацию:

  • README.md ← основной файл
  • README_DESKTOP.md ← подробности для Desktop

Для пользователей

Android:

  • Обновления теперь через Google Play Store
  • Кнопка "Проверить обновления" больше не показывается

Desktop:

  • Всё работает как раньше, но с улучшенным UX
  • Прогресс-бар при скачивании
  • Автоматический запуск установщика

Контрольный список релиза

  • Упростить код для Android
  • Реализовать скачивание для Desktop с прогресс-баром
  • Удалить InstallHandler.kt
  • Удалить REQUEST_INSTALL_PACKAGES permission
  • Обновить README.md
  • Создать README_DESKTOP.md
  • Обновить комментарии в api.php
  • Протестировать на Android emulator
  • Создать Windows .exe установщик
  • Создать macOS .dmg образ
  • Создать Linux .AppImage
  • Опубликовать в Google Play Store
  • Production деплой сервера