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
This commit is contained in:
271
update-server/WINDOWS_DISTRIBUTOR_BUILD.md
Normal file
271
update-server/WINDOWS_DISTRIBUTOR_BUILD.md
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
# Сборка 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!
|
||||||
@@ -68,8 +68,8 @@ function InitializeSetup(): Boolean;
|
|||||||
var
|
var
|
||||||
ResultCode: Integer;
|
ResultCode: Integer;
|
||||||
begin
|
begin
|
||||||
Exec('taskkill', '/F /IM hiddify.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
Exec('taskkill', '/F /IM umbrix.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||||
Exec('net', 'stop "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
Exec('net', 'stop "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||||
Exec('sc.exe', 'delete "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
Exec('sc.exe', 'delete "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
@@ -1,17 +1,13 @@
|
|||||||
app_id: 6L903538-42B1-4596-G479-BJ779F21A65D
|
app_id: 7U904649-52C2-5607-H590-CK880G32B76E
|
||||||
publisher: Hiddify
|
publisher: Umbrix Team
|
||||||
publisher_url: https://github.com/hiddify/hiddify-next
|
publisher_url: https://umbrix.net
|
||||||
display_name: Hiddify
|
display_name: Umbrix
|
||||||
executable_name: Hiddify.exe
|
executable_name: umbrix.exe
|
||||||
output_base_file_name: Hiddify.exe
|
output_base_file_name: umbrix-setup-x64.exe
|
||||||
create_desktop_icon: true
|
create_desktop_icon: true
|
||||||
install_dir_name: "{autopf64}\\Hiddify"
|
install_dir_name: "{autopf64}\\Umbrix"
|
||||||
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
|
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
|
||||||
locales:
|
locales:
|
||||||
- ar
|
|
||||||
- en
|
- en
|
||||||
- fa
|
|
||||||
- ru
|
- ru
|
||||||
- pt
|
|
||||||
- tr
|
|
||||||
script_template: inno_setup.sas
|
script_template: inno_setup.sas
|
||||||
|
|||||||
Reference in New Issue
Block a user