# 环境准备

```{note}
本章节为手动部署相关文档，适用于您需要将服务端内置到 ROM 或者自行拉起 FIRERPA 服务的情况，如您已使用 APP 启动了服务端并且无相关需求则无需再查看本章节。
```

本文介绍在安装、运行 FIRERPA 前应完成的设备、系统与网络等环境准备工作。FIRERPA 支持的设备类型和架构较多，此处列举了各种常见设备以及需提前设置的环境，您可以根据实际情况选择合适的方法。FIRERPA 整体分为客户端和服务端：客户端主要是 Python 相关库及接口，服务端则是运行在目标手机上的服务。您可以选择在电脑上安装 Python 库来控制手机；但如果您需要通过 Python 控制设备，则必须在手机上安装并运行安卓服务端。

## 基础要求

FIRERPA 最理想的运行环境是一台运行内存大于 4 GB，可用存储空间大于 4 GB 的安卓设备或模拟器。如果您没有实体安卓手机，也可以使用最新版夜神、雷电模拟器，或者 AVD 模拟器。发挥全部能力的 FIRERPA 需要您的设备具备 root 权限。如果设备不具备 root 权限，仍然可以通过开发者模式使用 adb shell 权限运行，只是部分特权功能将会受限或不可用。

## 系统设置

通常情况下，您的手机还需进行如下设置。这些设置并非必选，但为了确保一次成功，建议您在时间允许时完成以下几项设置。

### 检查时区时间

打开系统设置，找到日期与时间，检查是否已自动设置 **中国标准时间** 或您所在地的时区，并确认时间是否正确或在可接受的误差范围内。如果没有，请关闭 **使用网络提供的时区** 以及 **网络时间**，然后手动将时区和时间设置为当前所在地的对应值。

### 关闭无障碍

打开系统设置，找到无障碍（位于系统或更多设置中），关闭或卸载所有使用无障碍功能的应用（例如 talkback、autojs 等）。

```{note}
无障碍功能可能导致相关功能冲突，仅在您无法正常使用 FIRERPA 远程桌面或相关接口时检查此项环境。
```

## 网络设置

真机、云手机、模拟器等设备的网络情况各不相同，您需要根据实际情况完成以下对应设置，否则安装后可能无法正常访问服务。

对于真机，只需确保电脑与手机处于同一网络即可。对于模拟器，默认创建的模拟器通常与本机网络并不互通。如果您使用的是 Android-x86 基于 VMware 的虚拟机，需在虚拟机设置中将网络模式设置为桥接。对于雷电、夜神等模拟器，需要在其实例的设置中根据提示安装驱动、开启桥接模式并重启系统。对于 Android Studio 的虚拟设备，由于其不存在相关设置，所以如需连接 AVD 内的 FIRERPA，需要执行 `adb forward tcp:65000 tcp:65000`，然后使用 `localhost` 进行连接。

```{note}
对于转发或原本绑定到回环地址的服务端口，我们建议使用 localhost 代替 127.0.0.1，因为我们的部分工具（如中间人抓包）会依据 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)，请先扩展默认存储空间和内存大小。

点击 Android Studio 中的 Virtual Device Manager，新建一个虚拟机。然后找到对应虚拟机并点击后方的编辑按钮（笔形符号），点击 Show Advanced Settings，找到 Storage -> Internal Storage 并将其设置为至少 2 GB，同时将 RAM 内存大小设置为至少 4 GB。

### 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}
使用以上命令启动的安卓 redroid 容器，因其进行了端口映射，系统内的 65000 被映射到了宿主机的 65001，需在宿主机上通过 http://127.0.0.1:65001 访问。
```