Skip to content

Мобильная разработка

Android

Prerequisites

ИнструментОписание
Android SDKAPI Level 24+ (Android 7.0)
Android NDKДля cross-compilation Rust → Android
Tauri CLIcargo install tauri-cli (v2.x)
Rust targetsrustup target add aarch64-linux-android и др.

Настройка окружения: Tauri Android Prerequisites.

Сборка

bash
nx run backend:build:android

Tauri автоматически выполнит:

  1. Cross-compilation Rust backend для Android architectures
  2. Сборку frontend (Vite)
  3. Генерацию APK/AAB

Permissions

В backend/gen/android/app/src/main/AndroidManifest.xml:

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_STATEmDNS multicast для peer discovery
WAKE_LOCKPartial WakeLock — CPU не засыпает при P2P sync
FOREGROUND_SERVICEForeground service для P2P в фоне
FOREGROUND_SERVICE_DATA_SYNCТип foreground service (API 34+)
REQUEST_IGNORE_BATTERY_OPTIMIZATIONSЗапрос исключения из Doze mode

Doze mode и P2P

Android Doze mode приостанавливает сетевой доступ для фоновых приложений после ~1 часа бездействия. Для стабильной работы P2P используется три механизма:

  1. Battery Optimization Exemption — при первом запуске приложение запрашивает исключение из Doze (системный диалог). Это позволяет сохранять сетевой доступ в фоне.

  2. Foreground Service (P2pForegroundService) — запускается при старте приложения. Показывает тихую нотификацию "P2P sync active". Предотвращает убийство процесса системой и позволяет сетевой ввод-вывод в Doze.

  3. 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

  1. Оба устройства должны быть в одной Wi-Fi сети
  2. Запустите desktop-приложение: nx run backend:dev
  3. Установите APK на Android: nx run backend:build:android
  4. Используйте QR-pairing или PIN discovery для pairing

Для отладки P2P без Android-устройства используйте интеграционные тесты (на обычной dev-машине test-loopback не обязателен):

bash
cd infra/testing
npx tsx src/runner.ts --no-build --no-observability --no-tests --verbose

iOS / macOS

Статус

Версии для iOS и macOS пока не реализованы и находятся в планах.

Prerequisites

ИнструментОписание
Mac с Apple SiliconИли Intel Mac с Xcode
XcodeПоследняя стабильная версия
Apple Developer ID$99/год для distribution
CocoaPods / SPMУправление зависимостями
Rust targetsrustup target add aarch64-apple-ios

Tauri 2.x iOS support

Tauri 2.x поддерживает iOS через tauri ios toolchain:

bash
# Инициализация 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 интеграции