Files
umbrix/update-server/WINDOWS_DISTRIBUTOR_BUILD.md
Umbrix Developer 491feb04ac Configure flutter_distributor for Windows .exe installer
- Updated make_config.yaml: Umbrix branding, app_id, executable name
- Updated inno_setup.sas: umbrix.exe process termination
- Added WINDOWS_DISTRIBUTOR_BUILD.md: Complete build instructions
- flutter_distributor packages everything into single .exe file (~60MB)
- Result: umbrix-setup-x64.exe ready for Gitea release
2026-01-19 20:36:17 +03:00

272 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сборка 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!