Мобильная разработка
Android
Prerequisites
| Инструмент | Описание |
|---|---|
| Android SDK | API Level 24+ (Android 7.0) |
| Android NDK | Для cross-compilation Rust → Android |
| Tauri CLI | cargo install tauri-cli (v2.x) |
| Rust targets | rustup target add aarch64-linux-android и др. |
Настройка окружения: Tauri Android Prerequisites.
Сборка
nx run backend:build:androidTauri автоматически выполнит:
- Cross-compilation Rust backend для Android architectures
- Сборку frontend (Vite)
- Генерацию APK/AAB
Permissions
В backend/gen/android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />| Permission | Назначение |
|---|---|
INTERNET | Сетевой доступ (P2P, S3) |
ACCESS_NETWORK_STATE | Проверка состояния сети |
ACCESS_WIFI_STATE | Информация о Wi-Fi подключении |
CHANGE_WIFI_MULTICAST_STATE | mDNS multicast для peer discovery |
WAKE_LOCK | Partial WakeLock — CPU не засыпает при P2P sync |
FOREGROUND_SERVICE | Foreground service для P2P в фоне |
FOREGROUND_SERVICE_DATA_SYNC | Тип foreground service (API 34+) |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | Запрос исключения из Doze mode |
Doze mode и P2P
Android Doze mode приостанавливает сетевой доступ для фоновых приложений после ~1 часа бездействия. Для стабильной работы P2P используется три механизма:
Battery Optimization Exemption — при первом запуске приложение запрашивает исключение из Doze (системный диалог). Это позволяет сохранять сетевой доступ в фоне.
Foreground Service (
P2pForegroundService) — запускается при старте приложения. Показывает тихую нотификацию "P2P sync active". Предотвращает убийство процесса системой и позволяет сетевой ввод-вывод в Doze.Partial WakeLock — удерживает CPU от засыпания во время активной синхронизации.
WARNING
Если пользователь откажет в запросе Battery Optimization Exemption, P2P обнаружение может прерываться при длительном бездействии устройства. Пользователь может включить исключение вручную: Настройки → Приложения → Kontinuum → Батарея → Неограниченно.
mDNS на Android
mDNS discovery работает через Android NSD (Network Service Discovery) API. Особенности:
- NSD требует активного Wi-Fi подключения
- Multicast lock необходим для получения mDNS пакетов (
CHANGE_WIFI_MULTICAST_STATE) - При запуске на Android добавляется 3-секундная задержка для стабилизации multicast lock
- На некоторых устройствах mDNS может быть заблокирован производителем — в этом случае используйте QR-pairing
Тестирование P2P между desktop и Android
- Оба устройства должны быть в одной Wi-Fi сети
- Запустите desktop-приложение:
nx run backend:dev - Установите APK на Android:
nx run backend:build:android - Используйте QR-pairing или PIN discovery для pairing
Для отладки P2P без Android-устройства используйте интеграционные тесты (на обычной dev-машине test-loopback не обязателен):
cd infra/testing
npx tsx src/runner.ts --no-build --no-observability --no-tests --verboseiOS / macOS
Статус
Версии для iOS и macOS пока не реализованы и находятся в планах.
Prerequisites
| Инструмент | Описание |
|---|---|
| Mac с Apple Silicon | Или Intel Mac с Xcode |
| Xcode | Последняя стабильная версия |
| Apple Developer ID | $99/год для distribution |
| CocoaPods / SPM | Управление зависимостями |
| Rust targets | rustup target add aarch64-apple-ios |
Tauri 2.x iOS support
Tauri 2.x поддерживает iOS через tauri ios toolchain:
# Инициализация iOS проекта (когда будет реализовано)
cargo tauri ios init
# Dev-сервер на симуляторе
cargo tauri ios dev
# Release build
cargo tauri ios buildОжидаемые сложности
- Code signing: provisioning profiles, entitlements
- mDNS: iOS использует Bonjour (Apple реализация mDNS) — совместимо с libp2p mDNS
- Background execution: iOS ограничивает фоновые процессы — P2P синхронизация будет работать только при активном приложении
- File access: iOS sandbox ограничивает доступ к файловой системе — потребуется использование Document Provider или Files app интеграции