# 環境準備

```{note}
本章節為手動部署相關文件，適用於您需要將服務端內置到 ROM 或者自行拉起 FIRERPA 服務的情況，如您已使用 APP 啟動了服務端且無相關需求則無需再查看本章節。
```

本文介紹在安裝、執行 FIRERPA 前應完成的設備、系統與網路等環境準備工作。FIRERPA 支援的設備類型和架構較多，此處列舉了各種常見設備以及需提前設定的環境，您可以根據實際情況選擇合適的方法。FIRERPA 整體分為用戶端和服務端：用戶端主要是 Python 相關函式庫及介面，服務端則是執行在目標手機上的服務。您可以選擇在電腦上安裝 Python 函式庫來控制手機；但如果您需要通過 Python 控制設備，則必須在手機上安裝並執行 Android 服務端。

## 基礎要求

FIRERPA 最理想的執行環境是一台執行記憶體大於 4 GB，可用儲存空間大於 4 GB 的 Android 設備或模擬器。如果您沒有實體 Android 手機，也可以使用最新版夜神、雷電模擬器，或者 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}
使用以上命令啟動的 Android redroid 容器，因其進行了埠映射，系統內的 65000 被映射到了宿主機的 65001，需在宿主機上通過 http://127.0.0.1:65001 存取。
```