# Инструкция по сборке Hiddify v2.5.7 ## Успешная сборка выполнена 25 декабря 2025 г. ### Системные требования - **ОС**: Linux (Ubuntu 24.04) - **Java**: OpenJDK 17 - **Go**: 1.25.5 (для libcore, если собирать самостоятельно) - **Android SDK**: Platform 34, Build Tools, NDK 26.1.10909125 - **Disk Space**: ~15GB свободного места ### Версии компонентов #### Flutter ```bash # Установка FVM (Flutter Version Manager) flutter pub global activate fvm # Установка Flutter 3.24.0 (НЕ 3.24.3!) fvm install 3.24.0 fvm use 3.24.0 --force ``` **ВАЖНО**: В pubspec.yaml указано `flutter: ">=3.24.0 <=3.24.3"`, но в официальной сборке используется **3.24.0** (не 3.24.3). При использовании 3.24.3 возникает конфликт зависимостей intl. #### Gradle & Android - **Gradle**: 8.7 (обновлен с 7.6.1) - **AGP** (Android Gradle Plugin): 8.2.0 (обновлен с 7.4.2) - **Kotlin**: 1.9.22 (обновлен с 1.8.21) - **compileSdk**: 34 (НЕ 35 - несовместим с libcore) - **targetSdk**: 34 - **minSdk**: 21 #### Java ```bash # Проверка версии java -version # Должно быть: openjdk 17.x.x # Настройка Flutter для использования Java 17 flutter config --jdk-dir="/usr/lib/jvm/java-1.17.0-openjdk-amd64" ``` ### Пошаговая инструкция сборки #### 1. Клонирование репозитория ```bash cd /home/vodorod/dorod git clone --depth 1 --branch v2.5.7 --recurse-submodules https://github.com/hiddify/hiddify-app.git Umbrix-hid cd Umbrix-hid ``` #### 2. Исправление зависимостей **Проблема**: `flutter_easy_permission` устарел и не собирается с современными версиями Android. **Решение**: Закомментировать в `pubspec.yaml`: ```yaml # Строки 90-92, было: #flutter_easy_permission: ^1.1.2 flutter_easy_permission: git: https://github.com/unger1984/flutter_easy_permission.git # Изменить на: #flutter_easy_permission: ^1.1.2 #flutter_easy_permission: # git: https://github.com/unger1984/flutter_easy_permission.git ``` **Изменения в коде** (`lib/features/common/qr_code_scanner_screen.dart`): ```dart // Закомментировать импорт: // import 'package:flutter_easy_permission/easy_permissions.dart'; // Закомментировать константы: // const permissions = [Permissions.CAMERA]; // const permissionGroup = [PermissionGroup.Camera]; // В методе _requestCameraPermission() упростить: Future _requestCameraPermission() async { // Simplified: assuming permission is granted return true; } // В dispose() закомментировать: // FlutterEasyPermission().dispose(); // Во всех методах, где проверяется hasPermission, заменить на: final hasPermission = true; ``` #### 3. Обновление Gradle и AGP **android/settings.gradle**: ```gradle plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "8.2.0" apply false // было 7.4.2 id "org.jetbrains.kotlin.android" version "1.9.22" apply false // было 1.8.21 } ``` **android/gradle/wrapper/gradle-wrapper.properties**: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip # Было: gradle-7.6.1-bin.zip ``` #### 4. Скачивание libcore ```bash mkdir -p android/app/libs curl -L https://github.com/hiddify/hiddify-next-core/releases/download/v3.1.8/hiddify-core-android.tar.gz | tar xz -C android/app/libs/ ``` Должен появиться файл `android/app/libs/libcore.aar` (~119MB). #### 5. Генерация кода ```bash $HOME/.pub-cache/bin/fvm flutter pub get $HOME/.pub-cache/bin/fvm flutter pub run build_runner build --delete-conflicting-outputs ``` Эта команда генерирует: - Riverpod providers - Freezed модели - Drift database код - Localization файлы - Asset файлы #### 6. Сборка APK ```bash # Debug версия (без shrink для быстрой сборки) $HOME/.pub-cache/bin/fvm flutter build apk --debug --no-shrink # Release версия (требует keystore) # $HOME/.pub-cache/bin/fvm flutter build apk --release ``` **Результат**: ``` ✓ Built build/app/outputs/flutter-apk/app-debug.apk (193 MB) ✓ Built build/app/outputs/flutter-apk/app-arm64-v8a-debug.apk (88 MB) ✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-debug.apk (83 MB) ✓ Built build/app/outputs/flutter-apk/app-x86_64-debug.apk (86 MB) ``` #### 7. Установка на устройство/эмулятор ```bash # Запуск эмулятора (если есть) $HOME/Android/Sdk/emulator/emulator -avd <ИМЯ_AVD> # Проверка подключенных устройств $HOME/.pub-cache/bin/fvm flutter devices # Установка APK $HOME/Android/Sdk/platform-tools/adb install -r build/app/outputs/flutter-apk/app-x86_64-debug.apk ``` ### Типичные ошибки и решения #### Ошибка 1: intl version conflict ``` Because hiddify depends on flutter_localizations from sdk which depends on intl 0.20.2, intl 0.20.2 is required. So, because hiddify depends on intl ^0.19.0, version solving failed. ``` **Причина**: Flutter 3.24.3 требует intl 0.20.2, но проект использует 0.19.0. **Решение**: Использовать Flutter 3.24.0 (не 3.24.3). #### Ошибка 2: flutter_easy_permission compilation error ``` error: package pub.devrel.easypermissions does not exist ``` **Причина**: Пакет устарел и не имеет зависимости EasyPermissions. **Решение**: Закомментировать в pubspec.yaml и коде (см. шаг 2). #### Ошибка 3: Unresolved reference: nekohasekai ``` e: Unresolved reference: nekohasekai ``` **Причина**: Отсутствует libcore.aar. **Решение**: Скачать libcore v3.1.8 (см. шаг 4). #### Ошибка 4: Error while dexing ``` ERROR:D8: com.android.tools.r8.kotlin.H Execution failed for task ':app:mergeExtDexDebug'. ``` **Причина**: Несовместимость AGP 7.4.2 с Gradle 8.7. **Решение**: Обновить AGP до 8.2.0 и Kotlin до 1.9.22 (см. шаг 3). #### Ошибка 5: Namespace not specified ``` Namespace not specified. Specify a namespace in the module's build file. ``` **Причина**: flutter_easy_permission не закомментирован полностью в pubspec.yaml. **Решение**: Проверить что ВСЕ строки (включая git секцию) закомментированы. #### Ошибка 6: Android resource linking failed ``` aapt2 E: Failed to load resources table in APK '.../android-35/android.jar' ``` **Причина**: compileSdk 35 несовместим с AGP 7.x или поврежден SDK. **Решение**: Использовать compileSdk 34. ### Структура изменений #### Измененные файлы: 1. **pubspec.yaml** - Закомментирован flutter_easy_permission 2. **lib/features/common/qr_code_scanner_screen.dart** - Упрощена проверка permissions - Удалены вызовы FlutterEasyPermission 3. **android/settings.gradle** - AGP: 7.4.2 → 8.2.0 - Kotlin: 1.8.21 → 1.9.22 4. **android/gradle/wrapper/gradle-wrapper.properties** - Gradle: 7.6.1 → 8.7 5. **android/app/build.gradle** - Без изменений (compileSdk 34, targetSdk 34 остались) #### Добавленные файлы: - **android/app/libs/libcore.aar** (119 MB) - Core библиотека sing-box ### Очистка после ошибок Если сборка не удалась: ```bash # Полная очистка rm -rf ~/.gradle/caches/ rm -rf ~/.pub-cache/git/flutter_easy_permission-* rm -rf .flutter-plugins* rm -f pubspec.lock # Пересборка $HOME/.pub-cache/bin/fvm flutter clean $HOME/.pub-cache/bin/fvm flutter pub get $HOME/.pub-cache/bin/fvm flutter pub run build_runner build --delete-conflicting-outputs ./android/gradlew -p android clean ``` ### Проверка окружения ```bash # Flutter $HOME/.pub-cache/bin/fvm flutter doctor -v # Java java -version # Gradle ./android/gradlew -p android --version # Android SDK ls -la $HOME/Android/Sdk/platforms/ ``` ### Время сборки - **Первая сборка**: ~3-5 минут (с загрузкой зависимостей) - **Повторная сборка**: ~1.5-2 минуты - **Сборка после clean**: ~2-3 минуты ### Размер артефактов - **app-debug.apk** (universal): 193 MB - **app-arm64-v8a-debug.apk**: 88 MB (рекомендуется для современных устройств) - **app-armeabi-v7a-debug.apk**: 83 MB (для старых устройств) - **app-x86_64-debug.apk**: 86 MB (для эмуляторов) ### Примечания 1. **Не используйте системный Flutter** - только через FVM с версией 3.24.0 2. **Java 17 обязателен** - Java 21 не совместим с Gradle 7.x/8.x конфигурацией проекта 3. **libcore нельзя пропустить** - без него будут ошибки Kotlin компиляции 4. **AGP 8.2+ обязателен** для Gradle 8.7 5. **flutter_easy_permission** должен быть полностью закомментирован, включая git секцию ### Дополнительная информация - **Официальный репозиторий**: https://github.com/hiddify/hiddify-app - **Релиз v2.5.7**: https://github.com/hiddify/hiddify-app/releases/tag/v2.5.7 - **libcore v3.1.8**: https://github.com/hiddify/hiddify-next-core/releases/tag/v3.1.8 - **CI/CD конфигурация**: `.github/workflows/build.yml` (использует Flutter 3.24.0) ### Контрольные суммы ```bash # Проверка libcore.aar ls -lh android/app/libs/libcore.aar # Должно быть: ~119M # Проверка APK ls -lh build/app/outputs/flutter-apk/ ``` --- **Дата создания документа**: 25 декабря 2025 г. **Версия Hiddify**: 2.5.7 **Статус сборки**: ✅ Успешно