คู่มือการติดตั้งและใช้งาน Cuttlefish (Android Virtual Device สำหรับ Cloud/Linux) บน Ubuntu 22.04 LTS แบบ Step-by-step เน้น Technical command และการ Config System
1. Introduction: Why Cuttlefish?
หลายคนอาจสงสัยว่ามันต่างจาก Emulator ใน Android Studio หรือ QEMU ปกติยังไง?
Comparison: Cuttlefish vs The Rest
| Feature | Android Emulator (Goldfish) | Cuttlefish | Generic QEMU |
|---|---|---|---|
| User Target | App Developers | Platform/OS Engineers, CI/CD | System Architects |
| Environment | Desktop (GUI Required) | Cloud / Server (Headless First) | Any |
| Architecture | Para-virtualized (Optimized for Dev Speed) | Full Virtualization (VirtIO based) | Raw Emulation |
| Fidelity | High (App Level) | Very High (OS/Kernel Level) | Low (Config dependent) |
| Display | Local Window (Qt) | WebRTC (Stream to Browser) | VNC / Spice |
ทำไมตระกูล Emulator (Goldfish) ถึงไม่พอ?
- Goldfish ออกแบบมาเพื่อ “App Development” เน้นความเร็วในการ Deploy App และเปิดหน้าจอ UI บนเครื่อง Dev ไม่เหมาะกับ Server/Cloud เพราะผูกติดกับ GUI Framework (Qt)
- Cuttlefish ออกแบบมาเพื่อ Automated Test Farm และ Cloud รัน Android ล้วนๆ บน VM สตรีมภาพผ่าน WebRTC ได้
แล้วมันต่างจาก QEMU ไหม?
- Cuttlefish ใช้ crosvm (หรือ QEMU) เป็น Core ข้างใน แต่แพ็คมาพร้อมกับ Android HAL & Drivers (VirtIO) ที่จำเป็นทั้งหมด ทำให้บูท Android ได้สมบูรณ์แบบโดยไม่ต้อง Config Driver เอง
Part I: Installation & Setup
ส่วนนี้สำหรับการเตรียมเครื่อง Host ให้พร้อม (ทำครั้งแรกครั้งเดียว)
2. System Requirements
Cuttlefish ต้องการ KVM หากรันบน Cloud (GCP/AWS) ต้องเปิด Nested Virtualization
ตรวจสอบ KVM Support:
egrep -c '(vmx|svm)' /proc/cpuinfo
# ผลลัพธ์ต้องมากกว่า 0
ติดตั้ง Dependencies:
sudo apt update
sudo apt install -y git devscripts config-package-dev debhelper-compat golang curl
3. Build & Install Host Packages
วิธีที่เสถียรที่สุดบน Ubuntu 22.04 คือการ Build .deb จาก Source
3.1 Clone & Build:
mkdir -p ~/cuttlefish-build && cd ~/cuttlefish-build
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
# Build .deb files (ใช้เวลา 2-5 นาที)
debuild -i -us -uc -b -d
3.2 Install:
cd ..
sudo dpkg -i ./cuttlefish-base_*.deb ./cuttlefish-user_*.deb ./cuttlefish-common_*.deb
# Fix dependencies if needed
sudo apt-get install -f
4. User Configuration
เพื่อให้ User รัน Virtual Device และจัดการ Network ได้ ต้องเพิ่มเข้า Group:
sudo usermod -aG kvm,cvdnetwork,render $USER
Important: ต้อง Restart เครื่อง หรือ Log out/Log in ใหม่เพื่อให้ Group มีผล
Part II: How to Run (Choose your path)
เลือกวิธีรันตามความต้องการของคุณ: (A) ใช้ Image สำเร็จรูป หรือ (B) Build เองจาก AOSP
5. Path A: Using Pre-built Images (For Testing)
เหมาะสำหรับคนที่ต้องการทดสอบด่วนๆ ไม่อยากรอ Build AOSP
5.1 Get Tools & Images:
ต้องใช้ fetch_cvd หรือโหลดไฟล์จาก Android CI
cvd-host_package.tar.gz(Tools)aosp_cf_x86_64_phone-img-xxxx.zip(System Image)
5.2 Setup & Launch:
# 1. แตกไฟล์รวมกัน
mkdir my_cuttlefish && cd my_cuttlefish
tar xvf /path/to/cvd-host_package.tar.gz
unzip /path/to/aosp_cf_x86_64_phone-img-*.zip
# 2. Start Device
./bin/launch_cvd
# 3. Connect ADB
./bin/adb devices
6. Path B: Building from AOSP Source (For Devs)
เหมาะสำหรับคนทำ Custom ROM / Platform Developer
6.1 Build Target:
source build/envsetup.sh
# เลือก Target สำหรับ Cuttlefish (Phone)
lunch aosp_cf_x86_64_phone-userdebug
m # Build (รอนาน)
6.2 Launch Directly:
เมื่อ Build เสร็จ Environment Variables (ANDROID_PRODUCT_OUT) จะพร้อมใช้งาน
# สั่งรันได้เลย (ระบบจะหา Image จาก $OUT เอง)
launch_cvd
Note: หากเปิด Terminal ใหม่ ต้อง set path ก่อน:
launch_cvd -system_image_dir $HOME/aosp/out/target/product/vsoc_x86_64
Useful Commands:
launch_cvd -daemon # Run in background
launch_cvd -wipe_user_data=true # Wipe data (Factory reset)
launch_cvd -cpus=4 -memory_mb=4096 # Custom Spec
stop_cvd # Stop device
Part III: Advanced Features
7. Web UI Access
ควบคุมเครื่องผ่าน Browser (WebRTC) เหมาะสำหรับ Headless Server
- URL:
https://<server-ip>:8443 - ต้อง forward port 8443 หรือตั้ง Firewall ให้เข้าถึงได้
8. Custom Form Factors (TV, Auto, Foldable)
เปลี่ยน Form Factor ง่ายๆ แค่เปลี่ยน lunch target
Android TV:
lunch aosp_cf_x86_64_tv-userdebug
m
launch_cvd
# ได้ UI ทีวี พร้อม Remote Control ใน Web UI
Other Targets:
- Automotive:
lunch aosp_cf_x86_64_auto-userdebug - Wear OS:
lunch aosp_cf_x86_64_wear-userdebug - Foldable:
lunch aosp_cf_x86_64_foldable-userdebug
Troubleshooting
- Permission Denied: เช็ค Group
kvm,cvdnetworkและ Reboot เครื่อง - No KVM: เช็ค BIOS หรือ Nested Virtualization บน Cloud Provider
- ADB ไม่เจอ: ลองเช็ค
./bin/adbใน folder ที่รัน หรือเช็ค port 6520