# Сборка Windows установщика через flutter_distributor ## ✅ РЕШЕНИЕ: Один .exe файл со всеми зависимостями Hiddify использует **flutter_distributor** с **target: exe**, который: 1. Собирает Flutter приложение 2. Упаковывает ВСЕ файлы (exe + dll + data + libcore.dll) 3. Создает **Inno Setup** установщик 4. Результат: **ОДИН .exe файл** (~50-60MB) ## Требования 1. **Windows машина** (или VM) 2. **Flutter SDK** 3.24.0+ 3. **Visual Studio 2022** с C++ компонентами 4. **Inno Setup** 6.x+ (скачать: https://jrsoftware.org/isdl.php) ## Шаг 1: Клонирование репозитория на Windows ```powershell # Клонировать с Gitea git clone --recursive https://update.umbrix.net/vodorod/umbrix.git cd umbrix # Или обновить submodules если уже клонировано git submodule update --init --recursive ``` ## Шаг 2: Замена libcore.dll ```powershell # Скачать libcore с Gitea curl -L -o libcore-windows.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz" # Распаковать tar -xzf libcore-windows.tar.gz # Заменить в проекте Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force Copy-Item HiddifyCli.exe -Destination libcore\bin\HiddifyCli.exe -Force Copy-Item -Path webui -Destination libcore\bin\ -Recurse -Force ``` ## Шаг 3: Установка flutter_distributor ```powershell # Активировать плагин dart pub global activate flutter_distributor # Добавить в PATH (если еще нет) # C:\Users\YOUR_USERNAME\AppData\Local\Pub\Cache\bin ``` ## Шаг 4: Сборка установщика ```powershell # Собрать Windows .exe установщик dart run flutter_distributor:main package --platform windows --targets exe --skip-clean # Процесс: # 1. flutter build windows --release (5-10 минут) # 2. Копирование файлов в temp директорию # 3. Запуск Inno Setup для создания установщика (1-2 минуты) # 4. Результат: dist\1.7.3+173\umbrix-setup-x64.exe (~50-60MB) ``` ## Что происходит внутри? ### 1. Flutter Build ``` build/windows/x64/runner/Release/ ├── umbrix.exe (основной исполняемый файл) ├── data/ (ресурсы Flutter) │ ├── app.so │ ├── icudtl.dat │ └── flutter_assets/ ├── flutter_windows.dll (Flutter engine) ├── libcore.dll (VPN ядро, 45MB) └── другие .dll ``` ### 2. Inno Setup упаковывает - Все файлы из `build/windows/x64/runner/Release/` - Создает установщик с GUI на русском/английском - Добавляет ярлыки (рабочий стол + меню Пуск) - Регистрирует в "Установка и удаление программ" - Поддерживает тихую установку `/VERYSILENT` ### 3. Результат ``` dist/1.7.3+173/umbrix-setup-x64.exe (~50-60MB) ``` **Этот файл содержит ВСЁ:** - umbrix.exe - Flutter runtime - libcore.dll (45MB) - WebUI - Все зависимости ## Шаг 5: Тестирование ```powershell # Запустить установщик .\dist\1.7.3+173\umbrix-setup-x64.exe # Или тихая установка (для тестирования автообновлений) .\umbrix-setup-x64.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART # Проверить установку dir "C:\Program Files\Umbrix" ``` ## Шаг 6: Загрузка в Gitea ```powershell # Переименовать для релиза $version = "1.7.3" $file = "dist\$version+173\umbrix-setup-x64.exe" $newName = "umbrix-$version-windows-setup-x64.exe" Copy-Item $file $newName # Загрузить через API $token = "YOUR_GITEA_TOKEN" $releaseId = 1 # ID релиза v1.7.3 curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$newName" ` -H "Authorization: token $token" ` -H "Content-Type: application/octet-stream" ` --data-binary "@$newName" ``` ## Автоматизация (GitHub Actions) Создайте `.github/workflows/build-windows.yml`: ```yaml name: Build Windows on: push: tags: ['v*'] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: subosito/flutter-action@v2 with: flutter-version: '3.24.0' - name: Download libcore run: | curl -L -o libcore.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz" tar -xzf libcore.tar.gz Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force - name: Install flutter_distributor run: dart pub global activate flutter_distributor - name: Build Windows EXE run: dart run flutter_distributor:main package --platform windows --targets exe --skip-clean - name: Upload to Gitea env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | $file = Get-ChildItem dist\*\umbrix-setup-x64.exe | Select-Object -First 1 curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" ` -H "Authorization: token $env:GITEA_TOKEN" ` --data-binary "@$($file.FullName)" ``` ## Конфигурация (уже настроено) **windows/packaging/exe/make_config.yaml:** ```yaml app_id: 7U904649-52C2-5607-H590-CK880G32B76E publisher: Umbrix Team publisher_url: https://umbrix.net display_name: Umbrix executable_name: umbrix.exe output_base_file_name: umbrix-setup-x64.exe create_desktop_icon: true install_dir_name: "{autopf64}\\Umbrix" setup_icon_file: ..\..\windows\runner\resources\app_icon.ico locales: - en - ru ``` **windows/packaging/exe/inno_setup.sas:** - Шаблон Inno Setup с поддержкой тихой установки - Автоматически закрывает старую версию перед установкой - Создает ярлыки на рабочем столе и в меню Пуск ## Альтернатива: Ручная сборка через Inno Setup Если flutter_distributor не работает: ```powershell # 1. Собрать Flutter flutter build windows --release # 2. Создать installer.iss (см. WINDOWS_BUILD_INSTRUCTIONS.md) # 3. Скомпилировать через Inno Setup GUI # Или через командную строку: "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss ``` ## Troubleshooting **Ошибка: "Inno Setup not found"** ```powershell # Установить Inno Setup # Добавить в PATH: C:\Program Files (x86)\Inno Setup 6 ``` **Ошибка: "flutter_distributor command not found"** ```powershell # Переустановить dart pub global activate flutter_distributor # Проверить PATH echo $env:PATH | Select-String "Pub\\Cache\\bin" ``` **Ошибка: "Failed to lookup symbol 'changeHiddifyOptions'"** ```powershell # Убедитесь, что используете libcore.dll из umbrix-libcore репозитория # НЕ используйте оригинальный Hiddify libcore! ``` **Большой размер файла (~60MB)** - Это нормально! Включает: - Flutter runtime (~10MB) - libcore.dll (45MB) - WebUI (~600KB) - Инсталлятор Inno Setup (~5MB) ## Сравнение с Linux сборкой | Платформа | Команда | Результат | Размер | |-----------|---------|-----------|--------| | **Linux** | `dart run flutter_distributor package --platform linux --targets deb` | umbrix-1.7.3-linux.deb | 29MB | | **Windows** | `dart run flutter_distributor package --platform windows --targets exe` | umbrix-setup-x64.exe | 60MB | **Почему Windows больше?** - libcore.dll (45MB) vs libcore.so (45MB) - одинаково - Inno Setup упаковщик добавляет ~5MB - Windows DLL зависимости больше чем Linux .so ## Итого ✅ **flutter_distributor решает все проблемы:** - Один .exe файл вместо папки с множеством файлов - Автоматическая упаковка через Inno Setup - Поддержка тихой установки `/VERYSILENT` - Совместимость с системой автообновлений - Та же команда, что и для Linux (deb/rpm/appimage) 🎯 **На Windows машине выполнить одну команду:** ```powershell dart run flutter_distributor:main package --platform windows --targets exe --skip-clean ``` **Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` - готов к загрузке в Gitea!