# 安裝準備

安裝準備文件是為您描述在安裝前您應該準備好的事項，FIRERPA 支援的裝置類型和架構較多，此處列舉了各種常見裝置需要提前準備的操作，您可以根據實際情況來判斷使用何種方法。FIRERPA 整體分為用戶端以及伺服器端，用戶端主要是 Python 相關函式庫及介面，伺服器端則是執行在目標手機上的服務。您可以選擇在電腦上安裝 Python 函式庫來實現對手機的控制，同樣，如果需要透過 Python 控制裝置，您需要在手機上安裝並執行 Android 伺服器端，這是必選的。

## 基礎要求

FIRERPA 最理想的執行環境是您剛剛 root (如：新建模擬器，自帶權限的 ROM，Magisk 剛 root)，請確保有一台已經 root 且執行記憶體大於 2GB，可用儲存空間大於 1GB 的 Android 裝置或模擬器，推薦使用最新版夜神、雷電模擬器，或者 AVD 模擬器，啟動前**務必檢查**如下事項：

- [X] 關閉 Magisk Hide
- [x] 關閉 frida-server
- [X] 確認完畢後重啟裝置

```{important}
如您未按要求進行上述操作，存在的相容性問題可能導致您無法完全正常使用 FIRERPA 介面或遠端桌面。
```

## 系統設定

通常情況下，您的手機還需進行如下的設定，這些並非必選，但是為了確保能一次成功，建議您在有時間的情況下完成以下幾項設定。

### 檢查時區時間

開啟系統設定，找到日期與時間，檢查是否已自動設定**中國標準時間**或您所在地的時區，檢查時間是否正確或在可接受的誤差範圍內。如果沒有，請關閉**使用網路提供的時區**以及**網路時間**，並手動設定時區及時間為您目前所在地的時區及時間。

### 關閉無障礙服務

開啟系統設定，找到無障礙服務（在系統或更多設定中），關閉或卸載所有使用無障礙服務的應用程式（例如 TalkBack、Auto.js 等）。

```{note}
因無障礙服務可能會導致相關功能衝突，僅在您無法正常使用 FIRERPA 遠端桌面或相關介面時檢查。
```

## 網路設定

實體機、雲手機、模擬器等裝置的網路情況各不相同，您需要根據實際情況完成如下對應的設定，否則您在安裝後將無法正常存取服務。

對於實體機，只需要確保電腦與手機在同一個網路下即可。對於模擬器，預設建立的模擬器正常情況下與您的本機網路並不互通，如果您使用的是 Android x86 (基於 VMWare 的 Android 虛擬機)，
請嘗試在虛擬機設定中將網路模式設定為橋接模式。對於雷電、夜神等模擬器，需要在其設定中根據提示安裝驅動程式並開啟橋接模式，隨後重啟模擬器。對於 Android Studio 的 Virtual Device，則沒有相關設定。如果需要連接 AVD，請先執行 `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 並且已 root。隨後開啟 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 並將其設定為至少 2GB，並將 RAM 記憶體大小設定為至少 4GB。

### 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 容器，需要在主機上透過 `http://127.0.0.1:65001` 存取。
```