# Подготовка окружения

```{note}
Данный раздел относится к документации по ручному развёртыванию и предназначен для случаев, когда необходимо встроить серверную часть в прошивку ROM или самостоятельно запустить службу FIRERPA. Если вы уже запустили серверную часть через приложение и у вас нет соответствующих потребностей, этот раздел можно пропустить.
```

В этой статье описаны подготовительные работы с устройством, системой и сетью, которые необходимо выполнить перед установкой и запуском FIRERPA. FIRERPA поддерживает достаточно много типов устройств и архитектур; ниже перечислены распространённые устройства и настройки окружения, которые следует выполнить заранее. Вы можете выбрать подходящий способ в зависимости от фактических условий. FIRERPA в целом делится на клиентскую и серверную части: клиентская часть — это в основном библиотеки и интерфейсы Python, а серверная часть — служба, работающая на целевом телефоне. Вы можете установить библиотеки Python на компьютер для управления телефоном; однако если вам нужно управлять устройством через Python, на телефоне обязательно должна быть установлена и запущена серверная часть Android.

## Базовые требования

Наиболее подходящая среда для работы FIRERPA — устройство Android или эмулятор с объёмом оперативной памяти более 4 ГБ и свободным хранилищем более 4 ГБ. Если у вас нет физического Android-телефона, можно использовать последние версии эмуляторов Nox, LDPlayer или AVD. Для использования всех возможностей FIRERPA требуется наличие root-прав на устройстве. Если устройство не имеет root-прав, его по-прежнему можно запускать с правами adb shell через режим разработчика, но некоторые привилегированные функции будут ограничены или недоступны.

## Системные настройки

Обычно на телефоне также необходимо выполнить следующие настройки. Эти настройки не являются обязательными, но для успешного запуска с первого раза рекомендуется выполнить их при наличии времени.

### Проверка часового пояса и времени

Откройте системные настройки, найдите раздел «Дата и время» и проверьте, установлен ли автоматически **китайский стандартный часовой пояс** или часовой пояс вашего региона, а также是否正确но ли установлено время или находится ли оно в допустимых пределах. Если нет, отключите **использовать часовой пояс, предоставляемый сетью** и **сетевое время**, затем вручную установите часовой пояс и время, соответствующие вашему текущему местоположению.

### Отключение специальных возможностей

Откройте системные настройки, найдите раздел «Специальные возможности» (в разделе «Система» или «Дополнительные настройки»), отключите или удалите все приложения, использующие функции специальных возможностей (например, TalkBack, Auto.js и т. п.).

```{note}
Функции специальных возможностей могут вызывать конфликты. Проверяйте этот пункт окружения только в том случае, если вам не удаётся нормально использовать удалённый рабочий стол FIRERPA или соответствующие интерфейсы.
```

## Настройка сети

Сетевые условия физических устройств, облачных телефонов, эмуляторов и других устройств различаются. Вам необходимо выполнить соответствующие настройки в зависимости от фактической ситуации, иначе после установки доступ к службе может быть невозможен.

Для физического устройства достаточно убедиться, что компьютер и телефон находятся в одной сети. Для эмуляторов сеть созданного по умолчанию эмулятора обычно не связана с сетью локального компьютера. Если вы используете виртуальную машину Android-x86 на базе VMware, в настройках виртуальной машины необходимо установить сетевой режим «Bridge». Для эмуляторов LDPlayer, Nox и подобных необходимо в настройках их инстансов установить драйвер по подсказке, включить режим моста и перезагрузить систему. Для виртуальных устройств Android Studio такой настройки не существует, поэтому для подключения к FIRERPA внутри AVD необходимо выполнить `adb forward tcp:65000 tcp:65000`, а затем использовать `localhost` для подключения.

```{note}
Для проброшенных портов или портов службы, изначально привязанных к loopback-адресу, рекомендуется использовать localhost вместо 127.0.0.1, поскольку часть наших инструментов (например, перехват трафика man-in-the-middle) определяет по localhost, используется ли подключение через USB.
```

## Прочие настройки

### WSA (Windows Subsystem for Android)

Если используется WSA (Windows Subsystem for Android), убедитесь, что версия WSA не ниже 2210.40000. Затем откройте настройки WSA -> Subsystem Resources -> выберите Continuous, отключите Advanced Networking. Далее выберите Developer, включите Developer mode и разверните вкладку, отметьте «Support single machine UI automation», после чего перезапустите подсистему WSA.

### AVD (Android Studio Virtual Device)

Если используется AVD (Android Studio Virtual Device), сначала увеличьте объём встроенного хранилища и оперативной памяти.

Откройте Virtual Device Manager в Android Studio и создайте новую виртуальную машину. Затем найдите соответствующую виртуальную машину и нажмите кнопку редактирования позади неё (значок карандаша), нажмите Show Advanced Settings, найдите Storage -> Internal Storage и задайте не менее 2 ГБ, а также установите размер RAM не менее 4 ГБ.

### Redroid (android in docker)

```{attention}
Следующий метод может не подходить для других дистрибутивов Linux.
```

Если используется Redroid (android in docker), на примере официально рекомендуемой `Ubuntu 20.04` сначала установите модули linux-modules-extra.

```bash
apt install linux-modules-extra-`uname -r`
```

Отредактируйте файл `/etc/modules`, скопируйте приведённые ниже имена и вставьте их в конец файла, затем перезагрузите хост-систему.

```bash
# redroid modules
mac80211_hwsim

binder_linux
ashmem_linux
```

Наконец, запустите контейнер следующей командой. Параметр `redroid_gpu_mode` и другие связанные параметры измените в соответствии с фактической ситуацией.

```{attention}
Внимание: следующая команда отличается от официальной инструкции. Обязательно используйте команду в указанном виде.
```

```bash
docker run -itd --rm --privileged --pull always -v /lib/modules:/lib/modules:ro -v ~/redroid:/data -p 127.0.0.1:5555:5555 -p 127.0.0.1:65001:65000 redroid/redroid:12.0.0-latest androidboot.redroid_gpu_mode=guest
```

В приведённой выше команде порт 65000 контейнера пробрасывается на порт 65001 локальной машины, потому что некоторым инструментам требуется временно привязываться к порту 65000 на локальной машине. Чтобы избежать конфликта, используется порт 65001.

```{note}
В запущенном приведённой выше командой Android-контейнере redroid из-за проброса портов порт 65000 внутри системы отображается на порт 65001 хост-машины, поэтому на хост-машине доступ выполняется через http://127.0.0.1:65001.
```