คู่มือการติดตั้งและใช้งาน 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

FeatureAndroid Emulator (Goldfish)CuttlefishGeneric QEMU
User TargetApp DevelopersPlatform/OS Engineers, CI/CDSystem Architects
EnvironmentDesktop (GUI Required)Cloud / Server (Headless First)Any
ArchitecturePara-virtualized (Optimized for Dev Speed)Full Virtualization (VirtIO based)Raw Emulation
FidelityHigh (App Level)Very High (OS/Kernel Level)Low (Config dependent)
DisplayLocal 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

  1. Permission Denied: เช็ค Group kvm, cvdnetwork และ Reboot เครื่อง
  2. No KVM: เช็ค BIOS หรือ Nested Virtualization บน Cloud Provider
  3. ADB ไม่เจอ: ลองเช็ค ./bin/adb ใน folder ที่รัน หรือเช็ค port 6520