Android Emulator เป็นส่วนประกอบของ Android Studio ที่รันสำเนาเสมือนจริงของอุปกรณ์ Android บนคอมพิวเตอร์ของนักพัฒนา โปรแกรมจำลองใช้ QEMU เพื่อแปลคำสั่ง ARM เป็นสถาปัตยกรรม x86_64 ของโฮสต์ เอกสารของ Google อธิบายวงจรทั้งหมดของการตั้งค่าอุปกรณ์เสมือน AVD และการเร่งด้วยฮาร์ดแวร์
ประเด็นสำคัญ
Android Emulator คืออุปกรณ์ Android เสมือนที่ทำงานบน QEMU (Quick EMUlator) และจำลองแพลตฟอร์มฮาร์ดแวร์ Android แตกต่างจาก iOS Simulator ตรงที่ Android Emulator แปลคำสั่ง ARM อย่างสมบูรณ์ ทำให้โค้ดที่คอมไพล์สำหรับสถาปัตยกรรมมือถือสามารถทำงานบนโฮสต์ x86_64
Google เปิดตัว Android Emulator ในปี 2007 พร้อมกับ Android SDK รุ่นแรก ตั้งแต่นั้นมาโปรแกรมจำลองได้พัฒนาจากโซลูชันที่ช้าเฉพาะ ARM เป็นระบบประสิทธิภาพสูงที่รองรับ GPU การเร่งด้วยฮาร์ดแวร์ และการจำลองเซ็นเซอร์ ตามข้อมูลของ Google (Android Developer Blog, 2025) โปรแกรมจำลองสมัยใหม่กับ HAxM ทำงานเร็วกว่ารุ่นแรก 4-5 เท่า
โปรแกรมจำลองรองรับส่วนประกอบทั้งหมดของอุปกรณ์ Android: CPU, GPU, RAM, พื้นที่จัดเก็บ, หน้าจอสัมผัส, มาตรความเร่ง, ไจโรสโคป, GPS, กล้อง, แบตเตอรี่, NFC, บลูทูธ และ Wi-Fi นักพัฒนาสามารถจำลองสายเรียกเข้า SMS ระดับสัญญาณเครือข่ายต่างๆ และตำแหน่งทางภูมิศาสตร์ผ่าน Extended Controls
Android Emulator ใช้อิมเมจระบบ (System Images) ที่ดาวน์โหลดผ่าน SDK Manager แต่ละอิมเมจระบบมีสำเนาเต็มของเฟิร์มแวร์ Android สำหรับระดับ API และสถาปัตยกรรมโปรเซสเซอร์เป้าหมายที่เลือก มีอิมเมจพร้อมสถาปัตยกรรมต่างๆ: x86_64 (แนะนำกับ HAxM), ARM64 (สำหรับทดสอบความเข้ากันได้ ARM) และ Google APIs (พร้อม Google Play Services ที่ติดตั้งไว้ล่วงหน้า) นอกจากนี้ยังมีอิมเมจแยกสำหรับ Wear OS, Android TV และ Automotive
// การตรวจสอบประเภทโปรแกรมจำลองในโค้ด
val isEmulator = Build.FINGERPRINT
.contains("generic") ||
Build.PRODUCT.contains("sdk")
if (isEmulator) {
Timber.d("แอปทำงานในโปรแกรมจำลอง")
}AVD (Android Virtual Device) คือการกำหนดค่าอุปกรณ์เสมือนสำหรับโปรแกรมจำลอง AVD Manager ใน Android Studio ช่วยให้สร้างอุปกรณ์ด้วยคุณสมบัติผสมผสานใดๆ: รุ่น, ขนาดหน้าจอ, ความหนาแน่นพิกเซล, ขนาด RAM, ขนาดพื้นที่จัดเก็บ และเวอร์ชัน Android
| พารามิเตอร์ AVD | คำแนะนำสำหรับการพัฒนา | คำแนะนำสำหรับการทดสอบ |
|---|---|---|
| สถาปัตยกรรม | x86_64 (กับ HAxM) | ARM64 (การจำลองบริสุทธิ์) |
| RAM | 2048-4096 MB | 1536-2048 MB |
| พื้นที่จัดเก็บภายใน | 8-16 GB | 4-8 GB |
| ระดับ API | เสถียรล่าสุด | ขั้นต่ำที่รองรับ |
| Google Play Services | เปิดใช้งาน | ตามความจำเป็น |
การสร้าง AVD ทำผ่าน Device Manager ใน Android Studio: เลือกโปรไฟล์ฮาร์ดแวร์ (Pixel, Nexus, Galaxy และอื่นๆ), อิมเมจระบบ และกำหนดค่าพารามิเตอร์ หลังจากสร้าง อุปกรณ์จะปรากฏในรายการ Run Configurations สำหรับการเรียกใช้แอปทันที
โปรแกรมจำลองรองรับ Quick Boot — บันทึกสถานะ AVD เป็น snapshot และกู้คืนในการเริ่มต้นครั้งถัดไป เวลาบูตลดลงจาก 30-60 วินาทีเหลือ 2-5 วินาที หากต้องการรีเซ็ตเป็นสถานะสะอาด ให้ใช้ Cold Boot Now ใน AVD Manager
การแปล ARM เป็นเทคโนโลยีหลักของ Android Emulator ที่แปลงคำสั่ง ARM เป็น x86_64 แบบทันที หากไม่มีการแปล โปรแกรมจำลองจะรันได้เฉพาะอิมเมจ x86_64 ซึ่งจำกัดความสามารถในการทดสอบ Google ใช้ libhoudini สำหรับการแปล ARM→x86 และไลบรารี Intel สำหรับการเร่ง HAXM
# การตรวจสอบสถานะ HAxM บน Windows
sc query "IntelHaxm"
# การติดตั้ง HAxM ผ่าน SDK Manager
sdkmanager "extras;intel;Hardware_Accelerated_Execution_Manager"
# การเริ่มโปรแกรมจำลองด้วยการเร่งฮาร์ดแวร์
emulator -avd Pixel_9_API_35 -accel on -gpu autoIntel HAxM (Hardware Accelerated Execution Manager) คือไดรเวอร์เสมือนสำหรับโปรเซสเซอร์ Intel VT-x ที่เร่งโปรแกรมจำลอง 3-5 เท่า บน Windows ที่มีโปรเซสเซอร์ AMD ให้ใช้ Windows Hyper-V Platform และ WHPX หากไม่มีการเร่งด้วยฮาร์ดแวร์ โปรแกรมจำลองจะทำงานช้า โดยมีความหน่วงของแอนิเมชันสูงถึง 1-2 วินาที
บน macOS ที่มี Apple Silicon (M-series) การเร่งด้วยฮาร์ดแวร์ทำงานแบบเนทีฟผ่าน Hypervisor.framework ตามข้อมูลของ Google (Android Emulator Release Notes 2025) โปรแกรมจำลองบน M2 Max มีประสิทธิภาพถึง 95% ของอุปกรณ์จริงในการดำเนินการพื้นฐาน
การเลือกระหว่าง โปรแกรมจำลองและอุปกรณ์จริง ขึ้นอยู่กับขั้นตอนการพัฒนา บนโปรแกรมจำลองสะดวกในการพัฒนาและดีบัก: เริ่มต้นเร็ว, การปรับใช้ทันที, Extended Controls สำหรับจำลองเซ็นเซอร์ บนอุปกรณ์จริง — การทดสอบประสิทธิภาพ แบตเตอรี่ และการทำงานกับฮาร์ดแวร์ขั้นสุดท้าย
| สถานการณ์ | โปรแกรมจำลอง | อุปกรณ์จริง |
|---|---|---|
| การพัฒนา UI | ใช่ (เร็ว) | ไม่ (ปรับใช้ช้า) |
| การทดสอบประสิทธิภาพ | ไม่ (ค่าที่สูงเกินจริง) | ใช่ (การวัดจริง) |
| การจำลองเซ็นเซอร์ (GPS, NFC) | ใช่ (Extended Controls) | จำกัด |
| การใช้พลังงาน | ไม่รองรับ | ใช่ (Battery Historian) |
| การทดสอบเครือข่าย (2G/3G/4G/5G) | ใช่ (จำลองความเร็ว) | ใช่ (กับซิมการ์ด) |
| การทำงานอัตโนมัติ CI/CD | ใช่ (ไม่ต้องใช้อุปกรณ์จริง) | ยาก (ฟาร์มอุปกรณ์) |
ประสิทธิภาพ ของโปรแกรมจำลองที่เร่งด้วยฮาร์ดแวร์มักสูงกว่าอุปกรณ์จริงราคาประหยัด ดังนั้น ควรทำการทดสอบขั้นสุดท้ายบนอุปกรณ์จริงที่มีระดับประสิทธิภาพเป้าหมาย
การตรวจจับสภาพแวดล้อมการทำงานใน Kotlin มีประโยชน์สำหรับการปิดใช้งานโค้ดที่ไม่ถูกต้องหรือเพิ่มข้อมูลดีบัก Android มี Build.FINGERPRINT, Build.PRODUCT และ Build.HARDWARE สำหรับจุดประสงค์นี้
object EmulatorDetector {
val isEmulator: Boolean
get() = Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.contains("emulator")
|| Build.HARDWARE == "ranchu"
|| Build.HARDWARE == "goldfish"
fun logEnvironment() {
if (isEmulator) {
Log.d("EmulatorDetector", "สภาพแวดล้อม: โปรแกรมจำลอง")
}
}
}การใช้ตัวตรวจจับโปรแกรมจำลอง ช่วยในการดีบัก: บนโปรแกรมจำลองคุณสามารถเปิดใช้งานล็อกเพิ่มเติม ปิดใช้งานแอนิเมชัน หรือแทนที่การเรียก API จริงด้วยม็อก หลีกเลี่ยงการตรวจสอบในบิลด์โปรดักชันเว้นแต่จำเป็นสำหรับตรรกะทางธุรกิจของแอป
Android Emulator ใช้สำหรับการทดสอบอัตโนมัติบนเซิร์ฟเวอร์ CI ในการรันทดสอบ คุณต้องสร้าง AVD เริ่มโปรแกรมจำลอง และรอให้ระบบโหลดสมบูรณ์ Gradle Managed Devices ช่วยให้กระบวนการนี้ง่ายขึ้น: การกำหนดค่า AVD อธิบายไว้ใน build.gradle.kts
// build.gradle.kts — Gradle Managed Devices
android {
testOptions {
managedDevices {
devices {
register<ManagedVirtualDevice>("pixel9Api35") {
device = "Pixel 9"
apiLevel = 35
systemImageSource = "google"
}
}
}
}
}ในการเริ่มโปรแกรมจำลอง ด้วยตนเอง ให้ใช้บรรทัดคำสั่ง: emulator -avd Pixel_9_API_35 -no-window -no-audio -gpu swiftshader_indirect แฟล็ก -no-window ปิดใช้งานอินเทอร์เฟซกราฟิกสำหรับสภาพแวดล้อมเซิร์ฟเวอร์ และ -gpu swiftshader_indirect ให้การเรนเดอร์ซอฟต์แวร์โดยไม่มี GPU โฮสต์
Extended Controls ใน Android Emulator มีเครื่องมือทรงพลังสำหรับจำลอง สภาพเครือข่าย: ความหน่วง, แบนด์วิธ และประเภทเครือข่าย (GPRS, EDGE, 3G, 4G, 5G) ซึ่งช่วยให้ทดสอบพฤติกรรมของแอปภายใต้การเชื่อมต่อช้าโดยไม่ต้องเดินทางไปยังพื้นที่ที่มีสัญญาณไม่ดี
การจำลองเซ็นเซอร์ รวมถึงมาตรความเร่ง, ไจโรสโคป และแมกนีโตมิเตอร์ผ่านโมเดลอุปกรณ์ 3D เสมือน สำหรับ GPS คุณสามารถโหลดไฟล์ GPX พร้อมเส้นทาง — โปรแกรมจำลองจำลองการเคลื่อนที่ตามพิกัด ซึ่งสำคัญสำหรับการทดสอบแอปนำทาง กล้องถูกจำลองผ่านเว็บแคมโฮสต์หรือการโหลดภาพ
หลายจอแสดงผล ใน Android Emulator รองรับหลายหน้าจอสำหรับแท็บเล็ตและอุปกรณ์พับได้ Extended Controls ช่วยให้เปลี่ยนทิศทาง ขนาดหน้าจอ และความหนาแน่นพิกเซล (DPI) โดยไม่ต้องรีสตาร์ทโปรแกรมจำลอง สำหรับการทดสอบอุปกรณ์พับได้ มีโหมด Foldable ที่สลับระหว่างสถานะพับและกางออก
โปรแกรมจำลองรองรับไม่เพียงสมาร์ทโฟน แต่ยังรวมถึง Wear OS และ Android TV สำหรับ Wear OS มีการกำหนดค่า AVD ทรงกลมและสี่เหลี่ยม การจำลองการหมุนขอบและการปัดนิ้ว ตลอดจนการทดสอบปฏิสัมพันธ์กับโปรแกรมจำลองโทรศัพท์ สำหรับ Android TV ใช้อินเทอร์เฟซกับการนำทาง D-pad ทั้งสองแพลตฟอร์มรองรับการเร่งด้วยฮาร์ดแวร์และการทดสอบกับ Google Play Services ซึ่งสำคัญสำหรับวงจรการพัฒนาแอปสมาร์ทวอทช์และทีวี
คำถามที่พบบ่อย
Android Emulator ใช้ การจำลอง ARM อย่างสมบูรณ์ ผ่าน QEMU พร้อมการแปลคำสั่ง ในขณะที่ iOS Simulator คอมไพล์โค้ดสำหรับสถาปัตยกรรมโฮสต์ Android Emulator รองรับ GPU, กล้อง, เซ็นเซอร์, บลูทูธ, NFC — iOS Simulator ไม่รองรับคุณสมบัติเหล่านี้ส่วนใหญ่
ใน Kotlin ให้ตรวจสอบ Build.FINGERPRINT สำหรับ "generic" หรือ "emulator" และ Build.HARDWARE สำหรับ "ranchu" หรือ "goldfish" ใช้ Build.PRODUCT เป็นตัวบ่งชี้เพิ่มเติม — สำหรับโปรแกรมจำลองจะมี "sdk_google" หรือ "google_sdk"
เปิดใช้งาน Intel HAxM (Intel VT-x) หรือ Windows Hyper-V Platform (WHPX) สำหรับโปรเซสเซอร์ AMD ใช้อิมเมจระบบ x86_64 พร้อมการเร่งด้วยฮาร์ดแวร์ จัดสรร RAM อย่างน้อย 4 GB ให้โปรแกรมจำลองใน AVD Manager เปิดใช้งาน Quick Boot สำหรับการโหลด snapshot
ได้ Android Emulator รองรับการจำลอง NFC ตั้งแต่ Android 10 (API 29) Extended Controls → Phone → NFC อนุญาตให้ส่งข้อความ NDEF รองรับโหมดอ่าน/เขียนแท็ก, peer-to-peer และ HCE สำหรับการทดสอบเต็มรูปแบบ ให้ใช้อุปกรณ์จริงที่มีชิป NFC
สำหรับการพัฒนาประจำวัน ให้เลือก x86_64 กับ Google APIs — ประสิทธิภาพสูงสุดและบริการครบชุด สำหรับการทดสอบความเข้ากันได้ ใช้อิมเมจ ARM64 สำหรับ CI — อิมเมจที่ไม่มี Google Play Services มีขนาดเล็กกว่าและบูตเร็วกว่า
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ