# การเตรียมการติดตั้ง

เอกสารการเตรียมการติดตั้งนี้จะอธิบายสิ่งที่คุณควรเตรียมให้พร้อมก่อนการติดตั้ง FIRERPA รองรับอุปกรณ์และสถาปัตยกรรมหลายประเภท ในที่นี้จะยกตัวอย่างขั้นตอนการเตรียมการล่วงหน้าสำหรับอุปกรณ์ทั่วไปต่างๆ คุณสามารถเลือกใช้วิธีการที่เหมาะสมตามสถานการณ์จริงของคุณได้ FIRERPA โดยรวมแบ่งออกเป็น client และ server โดย client ส่วนใหญ่เป็นไลบรารีและอินเทอร์เฟซที่เกี่ยวข้องกับ Python ส่วน server คือบริการที่ทำงานบนโทรศัพท์เป้าหมาย คุณสามารถติดตั้งไลบรารี Python บนคอมพิวเตอร์เพื่อควบคุมโทรศัพท์ได้ และเช่นเดียวกัน หากต้องการควบคุมอุปกรณ์ผ่าน Python คุณจำเป็นต้องติดตั้งและเปิดใช้งาน Android server บนโทรศัพท์ของคุณ ซึ่งเป็นขั้นตอนที่จำเป็น

## ข้อกำหนดพื้นฐาน

สภาพแวดล้อมการทำงานที่เหมาะสมที่สุดสำหรับ FIRERPA คืออุปกรณ์ที่คุณเพิ่งทำการ root (เช่น: emulator ที่สร้างใหม่, ROM ที่มีสิทธิ์ในตัว, Magisk ที่เพิ่ง root) โปรดตรวจสอบให้แน่ใจว่าคุณมีอุปกรณ์ Android หรือ emulator ที่ root แล้ว และมี RAM มากกว่า 2GB และพื้นที่เก็บข้อมูลว่างมากกว่า 1GB แนะนำให้ใช้ NoxPlayer, LDPlayer หรือ AVD emulator เวอร์ชันล่าสุด ก่อนเริ่มต้น **ต้องตรวจสอบ** รายการต่อไปนี้:

- [X] ปิด Magisk Hide
- [x] ปิด frida-server
- [X] หลังจากยืนยันเรียบร้อยแล้ว ให้รีสตาร์ทอุปกรณ์

```{important}
หากคุณไม่ได้ดำเนินการตามขั้นตอนข้างต้น ปัญหาความเข้ากันได้ที่อาจเกิดขึ้นอาจทำให้คุณไม่สามารถใช้งานอินเทอร์เฟซ FIRERPA หรือ remote desktop ได้อย่างสมบูรณ์
```

## การตั้งค่าระบบ

โดยปกติแล้ว โทรศัพท์ของคุณอาจต้องมีการตั้งค่าเพิ่มเติมดังต่อไปนี้ สิ่งเหล่านี้ไม่ใช่ข้อบังคับ แต่เพื่อให้แน่ใจว่าจะสำเร็จในครั้งเดียว ขอแนะนำให้คุณทำการตั้งค่าเหล่านี้ให้เสร็จสิ้นหากมีเวลา

### ตรวจสอบโซนเวลาและเวลา

เปิดการตั้งค่าระบบ ไปที่วันที่และเวลา ตรวจสอบว่าได้ตั้งค่าเป็น **เวลามาตรฐานประเทศจีน** หรือโซนเวลาท้องถิ่นของคุณโดยอัตโนมัติหรือไม่ ตรวจสอบว่าเวลาถูกต้องหรืออยู่ในช่วงความคลาดเคลื่อนที่ยอมรับได้หรือไม่ หากไม่ถูกต้อง โปรดปิด **ใช้โซนเวลาที่เครือข่ายจัดหาให้** และ **เวลาจากเครือข่าย** แล้วตั้งค่าโซนเวลาและเวลาด้วยตนเองให้ตรงกับตำแหน่งปัจจุบันของคุณ

### ปิดการช่วยเหลือพิเศษ (Accessibility)

เปิดการตั้งค่าระบบ ไปที่การช่วยเหลือพิเศษ (Accessibility) (อาจอยู่ในส่วนการตั้งค่าระบบหรือการตั้งค่าเพิ่มเติม) ปิดหรือถอนการติดตั้งแอปพลิเคชันทั้งหมดที่ใช้บริการช่วยเหลือพิเศษ (เช่น TalkBack, Auto.js เป็นต้น)

```{note}
เนื่องจากบริการช่วยเหลือพิเศษอาจทำให้เกิดความขัดแย้งกับฟังก์ชันบางอย่าง โปรดตรวจสอบส่วนนี้เฉพาะเมื่อคุณไม่สามารถใช้งาน FIRERPA remote desktop หรืออินเทอร์เฟซที่เกี่ยวข้องได้ตามปกติเท่านั้น
```

## การตั้งค่าเครือข่าย

สภาพเครือข่ายของอุปกรณ์ต่างๆ เช่น โทรศัพท์จริง, cloud phone, และ emulator นั้นแตกต่างกัน คุณต้องทำการตั้งค่าให้สอดคล้องกับสถานการณ์จริงของคุณ มิฉะนั้นคุณจะไม่สามารถเข้าถึงบริการได้ตามปกติหลังการติดตั้ง

สำหรับโทรศัพท์จริง เพียงแค่ตรวจสอบให้แน่ใจว่าคอมพิวเตอร์และโทรศัพท์อยู่ในเครือข่ายเดียวกัน สำหรับ emulator โดยปกติแล้ว emulator ที่สร้างขึ้นมาตามค่าเริ่มต้นจะไม่สามารถสื่อสารกับเครือข่ายของเครื่องคอมพิวเตอร์ของคุณได้โดยตรง หากคุณใช้ Android x86 (Android virtual machine ที่ทำงานบน VMWare) ให้ลองตั้งค่าโหมดเครือข่ายเป็น Bridge Mode ในการตั้งค่าของ virtual machine สำหรับ emulator อย่าง LDPlayer, NoxPlayer คุณต้องติดตั้งไดรเวอร์ตามคำแนะนำในการตั้งค่าและเปิดใช้งาน Bridge Mode จากนั้นรีสตาร์ท emulator สำหรับ Virtual Device ของ Android Studio จะไม่มีการตั้งค่าที่เกี่ยวข้อง หากต้องการเชื่อมต่อกับ AVD โปรดรันคำสั่ง `adb forward tcp:65000 tcp:65000` ก่อน แล้วใช้ `localhost` ในการเชื่อมต่อ

```{note}
สำหรับพอร์ตบริการที่ถูก forward หรือผูกกับ loopback address อยู่แล้ว เราแนะนำให้ใช้ `localhost` แทน `127.0.0.1` เนื่องจากเครื่องมือบางอย่างของเรา เช่น man-in-the-middle packet capture จะใช้ `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 subsystem

### AVD (Android Studio Virtual Device)

หากคุณใช้ AVD (Android Studio Virtual Device) โปรดขยายขนาดพื้นที่เก็บข้อมูลและหน่วยความจำเริ่มต้นก่อน

คลิกที่ Virtual Device Manager ใน Android Studio, สร้าง virtual machine ใหม่ จากนั้นค้นหา virtual machine ที่ต้องการแล้วคลิกปุ่มแก้ไข (สัญลักษณ์รูปดินสอ)
คลิก Show Advanced Settings, ไปที่ Storage -> Internal Storage และตั้งค่าให้มีขนาดอย่างน้อย 2GB และตั้งค่าขนาด RAM เป็นอย่างน้อย 4GB

### Redroid (android in docker)

```{attention}
วิธีการต่อไปนี้อาจไม่สามารถใช้ได้กับ Linux distribution อื่นๆ
```

หากคุณใช้ Redroid (android in docker) ยกตัวอย่างเช่น `Ubuntu 20.04` ที่แนะนำอย่างเป็นทางการ ให้ติดตั้งโมดูล linux-modules-extra ที่เกี่ยวข้องก่อน

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

แก้ไขไฟล์ `/etc/modules` คัดลอกชื่อต่อไปนี้ไปวางไว้ที่ท้ายไฟล์ จากนั้นรีสตาร์ทเครื่องโฮสต์ (host machine)

```bash
# โมดูล redroid
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
```

ในคำสั่งข้างต้น การ map พอร์ต 65000 ของ container ไปยังพอร์ต 65001 ของเครื่องโฮสต์นั้น เนื่องจากเครื่องมือบางอย่างจำเป็นต้องผูกกับพอร์ต 65000 ของเครื่องโฮสต์ชั่วคราว เพื่อหลีกเลี่ยงความขัดแย้ง เราจึงใช้พอร์ต 65001

```{note}
สำหรับ Android container ที่เริ่มต้นด้วยคำสั่งข้างต้น จะต้องเข้าถึงผ่าน `http://127.0.0.1:65001` บนเครื่องโฮสต์
```