AVD (Android Virtual Device) คือการกำหนดค่าอีมูเลเตอร์ที่จำลองอุปกรณ์ Android จริงบนคอมพิวเตอร์ของนักพัฒนา AVD แต่ละตัวประกอบด้วยเวอร์ชันระบบปฏิบัติการที่เลือก (System Image), ประเภทอุปกรณ์ (โทรศัพท์, แท็บเล็ต, Wear OS), ขนาดหน้าจอ และความจุหน่วยความจำ ตาม Google Android Developers, 2026 AVD ถูกใช้เพื่อทดสอบแอปพลิเคชันบน Android เวอร์ชันและการกำหนดค่าต่าง ๆ โดยไม่ต้องซื้ออุปกรณ์จริงหลายสิบเครื่อง QEMU คือไฮเปอร์ไวเซอร์ที่อีมูเลเตอร์ทำงานอยู่
ประเด็นสำคัญ
AVD (Android Virtual Device) คือการกำหนดค่าซอฟต์แวร์ที่อธิบายอุปกรณ์ Android เสมือน ซึ่งแตกต่างจากโทรศัพท์จริง AVD ไม่ต้องการฮาร์ดแวร์ — มันทำงานบนคอมพิวเตอร์ผ่านอีมูเลเตอร์ Android ที่ใช้ QEMU นักพัฒนาสร้าง AVD ตามต้องการสำหรับการทดสอบ: สำหรับ Android เวอร์ชันต่าง ๆ ขนาดหน้าจอ ความจุหน่วยความจำ และความหนาแน่นของพิกเซล
AVD แต่ละตัวเชื่อมโยงกับ SDK Platform ที่เฉพาะเจาะจง ซึ่งหมายความว่าหากต้องการสร้าง AVD ด้วย Android 14 (API Level 34) คุณต้องติดตั้ง System Image ของเวอร์ชันนั้นก่อนผ่าน SDK Manager System Image คืออิมเมจระบบปฏิบัติการที่รวมแอปพลิเคชันระบบทั้งหมด บริการของ Google (หากเลือกอิมเมจ Google APIs) และคอมโพเนนต์รันไทม์ Google แนะนำให้ใช้อิมเมจ Google APIs กับบริการ Google Play เพื่อความเข้ากันได้สูงสุดกับอุปกรณ์จริง
AVD เป็นสิ่งจำเป็นในการพัฒนาด้วยเหตุผลหลายประการ ประการแรก มันช่วยให้ทดสอบแอปพลิเคชันบน Android เวอร์ชันต่าง ๆ โดยไม่ต้องซื้ออุปกรณ์หลายสิบเครื่อง ประการที่สอง AVD รองรับ Snapshot — การบันทึกสถานะระบบ ซึ่งช่วยเร่งการเริ่มทำงาน ประการที่สาม อีมูเลเตอร์ทำงานร่วมกับ Android Studio: การติดตั้ง APK การดีบัก และการบันทึกบันทึกทำงานเหมือนกับบนอุปกรณ์จริง
AVD รองรับอุปกรณ์หลายประเภท: โทรศัพท์ แท็บเล็ต นาฬิกา Wear OS, Android TV และ Android Automotive สำหรับแต่ละประเภท AVD Manager มีโปรไฟล์สำเร็จรูปจาก Google: Pixel 8, Pixel 9 Pro, Nexus 7, Samsung Galaxy Tab และอื่น ๆ โปรไฟล์อุปกรณ์กำหนดขนาดหน้าจอ ความละเอียด ความหนาแน่นของพิกเซล (dpi) และการนำทาง (ท่าทางหรือปุ่ม)
| ประเภทอุปกรณ์ | ตัวอย่างโปรไฟล์ | ความละเอียด | dpi |
|---|---|---|---|
| Phone | Pixel 8 | 1080x2400 | 420 |
| Phone | Pixel 9 Pro | 1280x2856 | 490 |
| Tablet | Pixel Tablet | 2560x1600 | 320 |
| Wear OS | Pixel Watch | 384x384 | 320 |
| Android TV | Android TV 4K | 1920x1080 | 240 |
AVD แต่ละตัวคือชุดของไฟล์กำหนดค่าและอิมเมจ ไฟล์กำหนดค่าหลักคือ config.ini ซึ่งเก็บพารามิเตอร์ของอุปกรณ์เสมือน: ชื่อ ประเภท API Level ขนาดหน้าจอ RAM และขนาด VM heap ไฟล์อยู่ในไดเรกทอรี $HOME/.android/avd/ชื่อAVD.avd/ และสามารถแก้ไขด้วยตนเองได้ แม้ว่าโดยปกติจะแก้ไขผ่าน AVD Manager
นอกจาก config.ini แล้ว ไดเรกทอรี AVD ยังเก็บ: userdata.img (อิมเมจข้อมูลผู้ใช้ — แอปพลิเคชัน การตั้งค่า ไฟล์), system.img (ลิงก์ไปยัง System Image ของ SDK Platform ที่ติดตั้ง), cache.img (แคช) และ sdcard.img (อิมเมจการ์ด SD) เมื่อดำเนินการ Wipe Data userdata.img จะถูกลบและสร้างอิมเมจว่างใหม่ Snapshot จะถูกบันทึกในโฟลเดอร์แยกต่างหาก snapshots/ ภายในไดเรกทอรี AVD
System Image จะถูกดาวน์โหลดแยกจาก AVD — หนึ่งอิมเมจสามารถใช้ได้โดยอุปกรณ์เสมือนหลายเครื่อง อิมเมจระบบถูกเก็บไว้ในไดเรกทอรี Android SDK: $ANDROID_SDK/system-images/android-{API}/{type}/{arch}/ ประเภทอิมเมจ: google_apis (มีบริการ Google), google_apis_playstore (มี Google Play Store) และ default (AOSP บริสุทธิ์ไม่มีบริการ Google)
| ประเภทอิมเมจ | บริการ Google | Google Play | วัตถุประสงค์ |
|---|---|---|---|
| AOSP (default) | ไม่ | ไม่ | ทดสอบพื้นฐาน, Android บริสุทธิ์ |
| Google APIs | ใช่ | ไม่ | ทดสอบบริการ Google, Maps, FCM |
| Google Play | ใช่ | ใช่ | ทดสอบเต็มรูปแบบกับ Play Store และการอนุญาตสิทธิ์ |
AVD Manager คือเครื่องมือแบบกราฟิกใน Android Studio สำหรับสร้างและจัดการอุปกรณ์เสมือน สามารถเปิดได้ผ่านเมนู Tools → Device Manager หรือผ่านไอคอนบนแถบเครื่องมือ AVD Manager แสดงรายการอุปกรณ์ที่สร้าง สถานะ (กำลังทำงาน/หยุด), เวอร์ชัน Android และการดำเนินการที่พร้อมใช้งาน (เริ่ม, หยุด, ลบข้อมูล, แก้ไข)
หากต้องการสร้าง AVD ใหม่ ให้คลิกปุ่ม Create device เลือกโปรไฟล์อุปกรณ์จากรายการสำเร็จรูป — Google มีโปรไฟล์สำหรับอุปกรณ์ยอดนิยมทั้งหมด หลังจากเลือกโปรไฟล์ ให้ระบุ System Image: เวอร์ชัน Android และประเภทอิมเมจ สำหรับโปรเจกต์ใหม่ ให้เลือกเวอร์ชันเสถียรล่าสุดกับอิมเมจ Google APIs จากนั้นกำหนดชื่อ AVD การวางแนวหน้าจอ RAM และขนาด VM heap หลังจากสร้าง AVD ก็พร้อมใช้งาน
# 1. รายการ System Images ที่พร้อมใช้งาน
sdkmanager --list | grep system-images
# 2. ติดตั้ง System Image สำหรับ API 35 พร้อม Google APIs
sdkmanager "system-images;android-35;google_apis;x86_64"
# 3. สร้าง AVD ชื่อ pixel8_api35
avdmanager create avd -n pixel8_api35 \
-k "system-images;android-35;google_apis;x86_64" \
-d pixel_8
# 4. เริ่ม AVD ที่สร้างขึ้น
emulator -avd pixel8_api35 -gpu host -memory 2048
# 5. รายการ AVD ทั้งหมด
avdmanager list avd
AVD Manager ช่วยให้กำหนดค่าคุณลักษณะฮาร์ดแวร์ของอุปกรณ์เสมือนอย่างละเอียด พารามิเตอร์หลัก: RAM (หน่วยความจำเข้าถึงโดยสุ่ม ค่าที่แนะนำ 2048–4096 MB), VM heap (ขนาดฮีปของเครื่องเสมือน, 256–512 MB), พื้นที่เก็บข้อมูลภายใน (2–8 GB) และ การ์ด SD (การ์ด SD เสมือน) พารามิเตอร์เหล่านี้ส่งผลต่อประสิทธิภาพของแอปพลิเคชันและพฤติกรรมเมื่อหน่วยความจำไม่เพียงพอ
การตั้งค่าเพิ่มเติมรวมถึง: กล้อง (จำลองหรือเชื่อมต่อเว็บแคมโฮสต์), เซ็นเซอร์ (มาตรความเร่ง, ไจโรสโคป), NFC, Bluetooth และแบตเตอรี่ ตัวอย่างเช่น ในการทดสอบแอปพลิเคชันที่ตรวจจับตำแหน่ง สามารถจำลองการหมุนอุปกรณ์ผ่านปุ่มควบคุมอีมูเลเตอร์หรือผ่าน ADB การจำลองเซ็นเซอร์ ช่วยให้ทดสอบสถานการณ์ที่ยากต่อการทำซ้ำบนอุปกรณ์จริง
| พารามิเตอร์ | คำอธิบาย | ค่าที่แนะนำ |
|---|---|---|
| hw.ramSize | RAM ของอุปกรณ์ | 2048 |
| vm.heapSize | ขนาดฮีปของเครื่องเสมือน | 256 |
| hw.gpuEnabled | การเร่งกราฟิกด้วยฮาร์ดแวร์ | yes |
| hw.gpuMode | โหมด GPU (host/mesa) | host |
| disk.dataPartition.size | ขนาดพาร์ติชันข้อมูล | 4096M |
| hw.camera | ประเภทการจำลองกล้อง | emulated |
ความเร็วของ AVD ขึ้นอยู่กับการจำลองเสมือนฮาร์ดแวร์โดยตรง บน Windows ใช้ Windows Hypervisor Platform (WHPX), บน macOS — Hypervisor.Framework, บน Linux — KVM หากปิดการจำลองเสมือน AVD จะทำงานในโหมดจำลองซอฟต์แวร์ล้วน ซึ่งช้ากว่า 10–20 เท่า หากต้องการตรวจสอบว่าการจำลองเสมือนเปิดอยู่หรือไม่ ให้รันอีมูเลเตอร์ด้วยแฟล็ก -accel-check
ปัจจัยสำคัญที่สองคือการเลือกสถาปัตยกรรม System Image อิมเมจ x86_64 ทำงานเร็วกว่า arm64-v8a อย่างมากบนคอมพิวเตอร์ที่มีโปรเซสเซอร์ Intel และ AMD เนื่องจากไม่ต้องแปลคำสั่ง ARM แบบไดนามิก ใช้อิมเมจ x86_64 เสมอสำหรับการพัฒนาบน Windows และ macOS ที่มีโปรเซสเซอร์ Intel บนโปรเซสเซอร์ ARM Mac (Apple Silicon) ให้ใช้อิมเมจ arm64-v8a ดั้งเดิม
# เริ่มด้วยการจำลองเสมือนฮาร์ดแวร์และการเร่ง GPU
emulator -avd pixel8_api35 -gpu host -memory 4096 -cores 4
# ตรวจสอบการรองรับการจำลองเสมือน
emulator -accel-check
# รันโดยไม่มีส่วนติดต่อแบบกราฟิก (สำหรับ CI)
emulator -avd pixel8_api35 -no-window -no-audio -gpu off
# ใช้ Snapshot เพื่อเริ่มทำงานอย่างรวดเร็ว
emulator -avd pixel8_api35 -snapshot mysnapshot -no-snapshot-save
เพื่อประสิทธิภาพ AVD สูงสุด: จัดสรร RAM อย่างน้อย 2–4 GB ให้อีมูเลเตอร์ เปิดใช้งาน GPU Host (ใช้การ์ดกราฟิกของคอมพิวเตอร์สำหรับการเรนเดอร์) ปิดเสียง (แฟล็ก -no-audio) หากไม่จำเป็น และใช้ Snapshot เพื่อกลับสู่สถานะสะอาดอย่างรวดเร็ว Snapshot บันทึกสถานะระบบทั้งหมด — การเริ่มจาก Snapshot ใช้เวลา 2–5 วินาทีแทนที่จะเป็น 30–60 วินาทีสำหรับการบูตเต็มรูปแบบ
แนะนำให้เก็บ AVD ไว้บนไดรฟ์ SSD — การดำเนินการ I/O ระหว่างการบูตระบบและการติดตั้ง APK จะเร็วขึ้นอย่างมาก หากต้องการรัน AVD หลายตัวพร้อมกัน ให้เพิ่มจำนวน RAM ทั้งหมดบนคอมพิวเตอร์และใช้แฟล็ก -read-only สำหรับอีมูเลเตอร์ที่ไม่เปลี่ยนรูป
การควบคุม AVD อย่างสมบูรณ์สามารถทำได้จากบรรทัดคำสั่งโดยไม่ต้องใช้ Android Studio เครื่องมือ avdmanager และ emulator เป็นส่วนหนึ่งของ Android SDK และดำเนินการทั้งหมด: การสร้าง การลบ การเริ่ม และการกำหนดค่า AVD บรรทัดคำสั่งมีประโยชน์โดยเฉพาะในไปป์ไลน์ CI/CD ที่ไม่มีอินเทอร์เฟซแบบกราฟิก และสำหรับการทดสอบอัตโนมัติ
# สร้าง AVD ด้วยพารามิเตอร์ที่กำหนดเอง
avdmanager create avd -n test_device \
-k "system-images;android-34;google_apis;x86_64" \
--device "pixel_8" \
--force
# ลบ AVD
avdmanager delete avd -n test_device
# โคลน AVD (โดยคัดลอกไฟล์)
cp -r ~/.android/avd/pixel8_api35.avd ~/.android/avd/pixel8_clone.avd
# รีเซ็ตข้อมูล AVD
emulator -avd test_device -wipe-data
# ติดตั้ง APK บน AVD ที่กำลังทำงาน
adb -s emulator-5554 install app-release.apk
หลังจากเริ่ม AVD แล้ว สามารถทำงานกับมันผ่าน ADB (Android Debug Bridge) เช่นเดียวกับอุปกรณ์จริง ADB ช่วยให้ติดตั้งแอปพลิเคชัน เรียกใช้ intent จำลองเหตุการณ์ (โทร, SMS, GPS) ถ่ายภาพหน้าจอ และบันทึกวิดีโอหน้าจอ ทำให้ AVD เป็นสภาพแวดล้อมที่สมบูรณ์สำหรับการทดสอบอัตโนมัติ
# รายการอุปกรณ์ที่เชื่อมต่อ (รวม AVD)
adb devices
# จำลองสายเรียกเข้า
adb emu gsm call +15551234567
# จำลองพิกัด GPS
adb emu geo fix -122.084 37.422
# ถ่ายภาพหน้าจอ
adb exec-out screencap -p > screenshot.png
# ส่ง SMS
adb emu sms send +15551234567 "Hello from AVD"
บางครั้งนักพัฒนาจำเป็นต้องระบุในโค้ดว่าแอปพลิเคชันกำลังทำงานบนอีมูเลเตอร์หรือบนอุปกรณ์จริง ซึ่งอาจจำเป็นเพื่อปิดการวิเคราะห์ (เพื่อหลีกเลี่ยงการปนเปื้อนข้อมูลการผลิต) เปิดการบันทึกแบบขยาย หรือปิดฟังก์ชันที่ขึ้นกับฮาร์ดแวร์ที่ไม่ทำงานบนอีมูเลเตอร์ Google มีวิธีการตรวจสอบมาตรฐานผ่านคลาส Build และคุณสมบัติของระบบ
object EmulatorDetector {
fun isEmulator(): Boolean {
return (Build.BRAND.startsWith("generic") &&
Build.DEVICE.startsWith("generic")) ||
Build.FINGERPRINT.startsWith("generic") ||
Build.FINGERPRINT.startsWith("unknown") ||
Build.HARDWARE.contains("goldfish") ||
Build.HARDWARE.contains("ranchu") ||
Build.MODEL.contains("google_sdk") ||
Build.MODEL.contains("Emulator") ||
Build.MODEL.contains("Android SDK")
}
}
// การใช้งาน
if (EmulatorDetector.isEmulator()) {
Log.d("App", "Running on emulator — enable debug mode")
}
วิธีการเพิ่มเติมคือการอ่านคุณสมบัติระบบผ่าน Build.getRadioVersion() และตรวจสอบ ro.kernel.qemu บนอีมูเลเตอร์ radio version คืนค่า null และคุณสมบัติ qemu ถูกตั้งค่าเป็น 1 วิธีนี้มีความน่าเชื่อถือมากกว่าบน Android เวอร์ชันเก่าที่ Build.FINGERPRINT อาจถูกปลอมแปลงโดยผู้ผลิตอุปกรณ์
fun isRunningOnEmulator(): Boolean {
// ตรวจสอบผ่าน radio version — บนอีมูเลเตอร์เป็น null เสมอ
val radioVersion = try {
Build.getRadioVersion()
} catch (e: Exception) {
null
}
if (radioVersion.isNullOrBlank()) return true
// ตรวจสอบผ่านคุณสมบัติระบบ
return try {
val props = ProcessBuilder()
.command("getprop", "ro.kernel.qemu")
.start()
.inputStream.bufferedReader().readText().trim()
props == "1"
} catch (e: Exception) {
false
}
}
คำถามที่พบบ่อย
AVD ทำงานบน QEMU และไม่สามารถจำลองคุณสมบัติฮาร์ดแวร์ได้ทั้งหมด: กล้องจริง, NFC, Bluetooth AVD เหมาะสำหรับการทดสอบ UI การตรวจสอบวงจรชีวิต และความเข้ากันได้ของเวอร์ชัน OS สำหรับการทดสอบกล้องและเซ็นเซอร์ที่แม่นยำ จำเป็นต้องใช้อุปกรณ์จริง
อย่างน้อย 2–3 AVD: API Level ล่าสุดสำหรับตรวจสอบฟีเจอร์ใหม่, ค่าต่ำสุดที่รองรับ (minSdk) เพื่อความเข้ากันได้ และรุ่นอุปกรณ์ยอดนิยม (Pixel 8 หรือ Samsung Galaxy) สำหรับทดสอบ UI บนหน้าจอเฉพาะ
สาเหตุหลัก: การจำลองเสมือนฮาร์ดแวร์ถูกปิด (WHPX, Hypervisor.Framework, KVM), RAM ไม่เพียงพอ (น้อยกว่า 2 GB), GPU Host ปิดอยู่ เปิด -gpu host และเพิ่มหน่วยความจำเป็น 2–4 GB — ซึ่งจะทำให้อีมูเลเตอร์เร็วขึ้น 3–5 เท่า
ได้ อีมูเลเตอร์สามารถเริ่มได้ผ่าน emulator -avd ชื่อ_AVD จากบรรทัดคำสั่ง ซึ่งต้องมี Android SDK, Platform-Tools และ System Image ที่ติดตั้งแล้ว AVD Manager ยังมีให้ใช้เป็นยูทิลิตีคอนโซลที่เรียกว่า avdmanager
ใน AVD Manager เลือก Wipe Data — ซึ่งจะลบ userdata.img และทำให้อีมูเลเตอร์กลับสู่สถานะเริ่มต้น จากบรรทัดคำสั่ง: emulator -avd ชื่อ -wipe-data Snapshot จะถูกเก็บรักษาไว้หากไม่ได้ลบแยกต่างหาก
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ