Tìm "giả lập Android trên cloud" và bạn sẽ gặp hai sản phẩm khác nhau dưới cùng một cái tên. Một là Android Emulator, chính là cái đi kèm Android Studio, chạy trên một máy chủ bạn thuê hoặc người khác vận hành. Cái còn lại là điện thoại đám mây: Android chạy trong data center, được thiết lập như một mẫu điện thoại cụ thể và giữ cho bạn như một thiết bị.
Để xem nhanh một ứng dụng, cái nào cũng được. Để test, tự động hóa và chạy việc dài hơi, chúng hoạt động khác nhau, và chọn sai sẽ tốn thời gian. Bài giải thích này nói về những gì chạy bên dưới, ứng dụng của bạn thấy gì, và khi nào mỗi loại là công cụ đúng.
Ba cách Android chạy trên máy chủ
Android Emulator. Một máy ảo dựa trên QEMU với phần cứng ảo mà Google gọi là goldfish và, ở các phiên bản hiện tại, ranchu. Nó khởi động các system image bạn tải trong SDK Manager. Nó chỉ nhanh khi có ảo hóa phần cứng, mà trên máy chủ Linux nghĩa là KVM, nên chạy nó trên VM cloud cần nested virtualization hoặc instance bare-metal. Không có tăng tốc, nó quay về giả lập bằng phần mềm và trở nên quá chậm để dùng tương tác.
Cuttlefish. Thiết bị ảo của Google được làm cho máy chủ thay vì máy tính để bàn. Nó chạy headless, phục vụ màn hình tới trình duyệt qua WebRTC, và được dùng rất nhiều trong việc test nền tảng Android. Đây là nền tảng tốt hơn nếu bạn tự xây dàn emulator, và nó đòi hỏi bạn quen với host Linux và các bản build AOSP.
Android dựa trên container. Phần user space của Android chạy trong container trên kernel Linux của host, và kernel đó cần hỗ trợ binder. Các dự án mã nguồn mở như Anbox, Waydroid và redroid hoạt động theo cách này, và nhiều dịch vụ điện thoại đám mây cũng vậy, thường trên máy chủ ARM, nơi ứng dụng arm64 chạy mà không cần dịch mã. Không có máy ảo đầy đủ cho mỗi điện thoại, nên cách này mở rộng được tới rất nhiều máy trên một máy chủ.
Ứng dụng của bạn thấy gì
Chạy ba lệnh trên emulator là câu trả lời hiện ra ngay:
adb shell getprop ro.product.model adb shell getprop ro.hardware adb shell wm size
Một system image của Google trả về mẫu máy như sdk_gphone64_x86_64 hoặc sdk_gphone64_arm64, phần cứng ranchu, và kích thước màn hình nào mà định nghĩa AVD đã gán. Như thế ổn để test logic của chính bạn. Nhưng nó che đi mọi thứ phụ thuộc vào loại thiết bị: lỗi bố cục chỉ xuất hiện ở kích thước và mật độ của một màn hình thật, các kiểm tra tính năng qua hasSystemFeature, và code media chọn codec theo những gì chipset hỗ trợ.
Một điện thoại đám mây dựng từ mẫu máy thật sẽ báo đúng mẫu máy đó: tên, độ phân giải và mật độ màn hình, phiên bản Android và mô tả phần cứng. Bố cục của bạn gặp đúng những màn hình người dùng đang có, và một báo cáo lỗi từ một chiếc máy cụ thể có thể được tái hiện trên cùng mẫu máy.
Có hai lưu ý để giữ cho bức tranh trung thực. Thứ nhất, hãy hỏi "mẫu máy thật" nghĩa là gì với từng dịch vụ: màn hình và mô tả phần cứng của mẫu máy, hay chính firmware của hãng kèm giao diện riêng. Những lỗi nằm trong trình tối ưu pin hay launcher của hãng cần đúng firmware đó, mà trên thực tế nghĩa là điện thoại vật lý. Thứ hai, đồ họa trong mọi Android ảo hóa đều được dịch lại hoặc dựng bằng phần mềm, nên cả emulator lẫn điện thoại đám mây đều không cho bạn biết ứng dụng vẽ nhanh đến đâu trên phần cứng thật.
Kiến trúc cũng quan trọng. Trên image emulator x86_64, thư viện native arm64 chạy qua một lớp dịch mã mà Google đưa vào image từ Android 11 trở đi. Nó chạy được với phần lớn ứng dụng và làm hỏng một số, chủ yếu là game và ứng dụng có nhiều native code. Trên host ARM, image arm64 chạy code đó trực tiếp.
Đặt cạnh nhau
| Emulator trên máy của bạn | Emulator trên máy chủ cloud | Điện thoại đám mây | Điện thoại vật lý | |
|---|---|---|---|---|
| Thiết bị hiện ra là | sdk_gphone chung chung | sdk_gphone chung chung | mẫu điện thoại bạn đã chọn | chính nó |
| Phiên bản Android | mọi system image | mọi system image | các phiên bản dịch vụ cung cấp | bản nào máy đang chạy |
| Native code arm64 | trực tiếp trên host ARM, dịch mã trên x86 | tùy host | thường là trực tiếp | trực tiếp |
| Trạng thái giữa các phiên | snapshot trên ổ đĩa của bạn | bạn tự lo giữ | được giữ như một chiếc điện thoại | được giữ |
| Truy cập từ | máy của bạn | SSH, VPN hoặc giao diện web bạn tự dựng | trình duyệt, API, ADB | cáp hoặc mạng của bạn |
| Giả lập vị trí, pin, mạng | có, từ console của emulator | có | tùy dịch vụ | không, điều kiện thật |
| Thiết lập và bảo trì | SDK và dung lượng ổ đĩa | host, KVM, image, cập nhật | không | mua, sạc, cập nhật |
| Hợp nhất cho | vòng sửa code rồi chạy | CI quy mô lớn | QA trên mẫu máy thật, máy dùng lâu dài, agent | camera, cảm biến, hiệu năng |
Nếu bạn đang cân nhắc cả Android VPS, bài điện thoại đám mây, giả lập hay Android VPS so sánh cả ba theo tám tiêu chí.
Khi nào emulator là công cụ đúng
Emulator có lợi thế ở bất cứ đâu mà tốc độ vòng lặp và khả năng kiểm soát điều kiện quan trọng hơn loại thiết bị.
- Vòng sửa code rồi chạy. Debugger, layout inspector, Compose preview và deploy tức thì đều giả định có emulator local hoặc điện thoại cắm cáp.
- Instrumentation test trong CI. Gradle Managed Devices định nghĩa AVD ngay trong file build và chạy test bằng một task, ví dụ
./gradlew pixel6api34DebugAndroidTest. Trên một host CI thông thường, khởi động headless trông như sau:
emulator -avd ci-api34 -no-window -no-audio -no-boot-anim -gpu swiftshader_indirect adb wait-for-device ./gradlew connectedDebugAndroidTest
- Giả lập điều kiện. Console của emulator đặt vị trí, pin và chất lượng mạng theo ý muốn, điều mà không điện thoại thật hay điện thoại đám mây nào làm dễ như vậy:
adb emu geo fix 13.405 52.52 adb emu power capacity 5 adb emu network speed edge
- Mọi API level, kể cả bản preview. Google phát hành system image cho các bản mới trước khi điện thoại được cập nhật.
Khi nào điện thoại đám mây là công cụ đúng
Điện thoại đám mây có lợi thế khi bản thân thiết bị là một phần của câu hỏi, hoặc khi chiếc điện thoại phải sống lâu hơn một phiên test.
- Mẫu máy thật. Tái hiện báo cáo từ một chiếc máy cụ thể, hoặc kiểm tra bố cục trên đúng những màn hình người dùng đang có. Danh sách mẫu máy cho thấy những gì đang có.
- Máy được giữ lại. Giữ đăng nhập bằng tài khoản test, giữ dữ liệu qua nhiều ngày và quan sát hành vi qua nhiều giờ, điều mà emulator CI bị vứt sau mỗi job không làm được.
- Không cần cài gì. Tester, designer hay kỹ sư hỗ trợ mở máy ngay trên trình duyệt. Lập trình viên muốn cảm giác như cắm cáp thì dùng ADB.
- AI agent. Agent cần một chiếc điện thoại có thể quan sát và thao tác trong suốt thời gian tác vụ cần; trang dành cho agent nói về cách dùng này.
- Quốc gia. Ứng dụng hoạt động khác nhau theo khu vực, và máy có thể kết nối mạng từ đúng quốc gia bạn cần.
Ví dụ trên Clousd, một máy được tạo trong khoảng một phút trên Android 12 đến 17, kết nối mạng từ quốc gia bạn chọn với múi giờ và ngôn ngữ tương ứng, và có thể đặt lại về trạng thái mới giữa các lần chạy.
Khi nào chỉ điện thoại vật lý mới làm được
Hãy giữ phần cứng thật cho chất lượng camera, độ chính xác cảm biến, hiệu năng đồ họa và pin, hành vi nhiệt, NFC và Bluetooth, và mọi thứ phụ thuộc vào firmware riêng của hãng. Chứng thực dựa trên phần cứng cũng thuộc nhóm này: đừng trông đợi nó từ bất kỳ Android ảo hóa nào.
Những lựa chọn miễn phí
Các lượt tìm "giả lập Android cloud miễn phí" thường dừng lại ở một trong ba nơi.
- Máy của chính bạn. Android Emulator miễn phí và chạy nhanh trên mọi laptop đời gần đây. Với nhiều lập trình viên, đây là câu trả lời đúng, không cần cloud nào cả.
- CI runner. Nhiều dịch vụ CI giờ đã mở KVM trên Linux runner, nên emulator chạy có tăng tốc trong phạm vi gói miễn phí, nhất là với repository công khai. Hãy xem tài liệu của nhà cung cấp; một số cần đổi quyền trên
/dev/kvmtrước. - Bản dùng thử của điện thoại có sẵn. Để xem nhanh một ứng dụng trên mẫu máy thật mà không cài gì, dùng thử điện thoại đám mây miễn phí cho bạn 30 phút, không cần thẻ.
Một lời cảnh báo. Những trang web cho dùng giả lập online miễn phí và bảo bạn tải APK lên mà không cần tài khoản đang trao bản build của bạn cho một bên không rõ danh tính. Đừng tải lên bản release, và không bao giờ tải lên bản build có chứa khóa production. Nếu mục tiêu chỉ là mở một ứng dụng trên trình duyệt, một giả lập Android online từ nhà cung cấp bạn xác định được là con đường an toàn hơn, và bài giả lập Android trên trình duyệt so sánh các lựa chọn.


