Поищите облачный эмулятор Android, и под одним названием найдутся два разных продукта. Первый — это Android Emulator, тот самый, что идёт в комплекте с Android Studio, только запущенный на сервере, который арендуете вы или кто-то другой. Второй — облачный телефон: Android в дата-центре, настроенный как конкретная модель телефона и закреплённый за вами, как устройство.
Чтобы быстро взглянуть на приложение, подойдёт любой. Для тестирования, автоматизации и долгой работы они ведут себя по-разному, и неверный выбор стоит времени. В этой статье разберём, что работает под капотом, что видит ваше приложение и когда какой инструмент уместен.
Три способа запустить Android на сервере
Android Emulator. Виртуальная машина на основе QEMU с виртуальным железом, которое Google называет goldfish, а в текущих версиях ranchu. Она загружает системные образы, которые вы скачиваете в SDK Manager. Быстро он работает только с аппаратной виртуализацией, а на Linux-сервере это KVM, поэтому для запуска на облачной VM нужна вложенная виртуализация или bare-metal-инстанс. Без ускорения эмулятор переходит на программную эмуляцию и становится слишком медленным для интерактивной работы.
Cuttlefish. Виртуальное устройство Google, сделанное для серверов, а не для рабочих компьютеров. Оно работает без окна, отдаёт экран в браузер по WebRTC и активно используется в тестировании самой платформы Android. Это лучшая основа, если вы строите собственный парк эмуляторов, но она рассчитана на то, что вы уверенно работаете с Linux-серверами и сборками AOSP.
Android в контейнере. Пользовательское пространство Android работает в контейнере на ядре Linux хоста, и этому ядру нужна поддержка binder. Так устроены open-source-проекты вроде Anbox, Waydroid и redroid, а также многие сервисы облачных телефонов, часто на ARM-серверах, где arm64-приложения работают без трансляции. Отдельной полноценной виртуальной машины на каждый телефон нет, поэтому такой подход масштабируется на много телефонов на одном сервере.
Что видит ваше приложение
Выполните на эмуляторе три команды, и ответ станет очевиден:
adb shell getprop ro.product.model adb shell getprop ro.hardware adb shell wm size
Системный образ Google отвечает моделью вроде sdk_gphone64_x86_64 или sdk_gphone64_arm64, железом ranchu и тем размером экрана, который задан в описании AVD. Для проверки собственной логики этого достаточно. Но так скрывается всё, что зависит от класса устройства: ошибки вёрстки, которые появляются только на размере и плотности настоящей матрицы, проверки функций через hasSystemFeature и медиакод, который выбирает кодек по тому, что предлагает чипсет.
Облачный телефон, собранный по модели настоящего телефона, сообщает эту модель: её название, разрешение и плотность экрана, версию Android и описание железа. Ваша вёрстка встречается с теми экранами, что у ваших пользователей, а баг-репорт с конкретного телефона можно воспроизвести на той же модели.
Ради честности две оговорки. Первая: уточните, что значит «настоящая модель» у конкретного сервиса — экран и описание железа модели или собственную прошивку производителя с его оболочкой. Ошибки, которые живут в оптимизаторе батареи или лаунчере производителя, требуют этой прошивки, а на практике это значит физический телефон. Вторая: графика в любом виртуализированном Android транслируется или рисуется программно, поэтому ни эмулятор, ни облачный телефон не скажут, как быстро ваше приложение рисует на реальном железе.
Важна и архитектура. На x86_64-образе эмулятора нативные arm64-библиотеки работают через слой трансляции, который Google включает в образы начиная с Android 11. Для большинства приложений это работает, но часть ломается, в основном игры и приложения с тяжёлым нативным кодом. На ARM-хостах arm64-образы выполняют этот код нативно.
Бок о бок
| Эмулятор на вашем компьютере | Эмулятор на облачном сервере | Облачный телефон | Физический телефон | |
|---|---|---|---|---|
| Каким устройством представляется | типовой sdk_gphone | типовой sdk_gphone | выбранной моделью телефона | собой |
| Версии Android | любой системный образ | любой системный образ | версии, которые предлагает сервис | та, что на нём стоит |
| Нативный arm64-код | нативно на ARM-хостах, с трансляцией на x86 | зависит от хоста | обычно нативно | нативно |
| Состояние между сеансами | снапшоты на вашем диске | сохранять — ваша забота | хранится, как у телефона | хранится |
| Откуда доступ | с вашего компьютера | SSH, VPN или веб-интерфейс, который вы сделаете сами | браузер, API, ADB | кабель или ваша сеть |
| Подмена геолокации, батареи, сети | да, из консоли эмулятора | да | зависит от сервиса | нет, реальные условия |
| Настройка и поддержка | SDK и место на диске | хосты, KVM, образы, обновления | не нужна | покупка, зарядка, обновления |
| Лучше всего для | цикла «поправил и запустил» | CI в больших объёмах | QA на настоящих моделях, долгоживущих телефонов, агентов | камеры, датчиков, производительности |
Если вы рассматриваете ещё и Android VPS, статья облачный телефон, эмулятор или Android VPS сравнивает все три варианта по восьми критериям.
Когда нужен эмулятор
Эмулятор выигрывает везде, где скорость итераций и контроль над условиями важнее класса устройства.
- Цикл «поправил и запустил». Отладчик, Layout Inspector, превью Compose и мгновенный деплой рассчитаны на локальный эмулятор или телефон на кабеле.
- Инструментальные тесты в CI. Gradle Managed Devices описывают AVD прямо в файле сборки и запускают тесты одной задачей, например
./gradlew pixel6api34DebugAndroidTest. На обычном CI-хосте запуск без окна выглядит так:
emulator -avd ci-api34 -no-window -no-audio -no-boot-anim -gpu swiftshader_indirect adb wait-for-device ./gradlew connectedDebugAndroidTest
- Смоделированные условия. Консоль эмулятора по команде задаёт геолокацию, заряд батареи и качество сети, а ни настоящий, ни облачный телефон так легко этого не умеют:
adb emu geo fix 13.405 52.52 adb emu power capacity 5 adb emu network speed edge
- Любой уровень API, включая предварительные версии. Google публикует системные образы новых релизов раньше, чем на них выходят телефоны.
Когда нужен облачный телефон
Облачный телефон выигрывает, когда само устройство входит в вопрос или когда телефон должен пережить один тестовый сеанс.
- Настоящие модели. Воспроизведите репорт с конкретного телефона или проверьте вёрстку на экранах, которые реально есть у ваших пользователей. Что доступно, видно в списке моделей.
- Телефоны, которые не пропадают. Оставайтесь залогиненными в тестовых аккаунтах, храните данные днями и наблюдайте поведение часами — эмулятор в CI, который выбрасывается после каждой задачи, так не умеет.
- Ничего не нужно ставить. Тестировщик, дизайнер или инженер поддержки открывает телефон в браузере. Разработчики, которым привычнее кабель, пользуются ADB.
- ИИ-агенты. Агенту нужен телефон, который он может видеть и которым может управлять столько, сколько длится задача; об этом страница для агентов.
- Страны. Приложения ведут себя по-разному в разных регионах, а телефон может выходить в сеть из нужной вам страны.
В Clousd, например, телефон создаётся примерно за минуту на Android с 12 по 17, выходит в сеть из выбранной страны с подходящим часовым поясом и языком и сбрасывается в чистое состояние между прогонами.
Когда подойдёт только физический телефон
Оставьте настоящее железо для качества камеры, точности датчиков, производительности графики и батареи, нагрева, NFC и Bluetooth и всего, что зависит от собственной прошивки производителя. Сюда же относится аппаратная аттестация: от виртуализированного Android её не ждите.
Бесплатные варианты
Поиск «бесплатный облачный эмулятор Android» обычно заканчивается в одном из трёх мест.
- Ваш собственный компьютер. Android Emulator бесплатен и быстро работает на любом современном ноутбуке. Для многих разработчиков это и есть правильный ответ, и облако не нужно.
- CI-раннеры. Многие CI-сервисы теперь дают KVM на Linux-раннерах, так что эмулятор работает с ускорением в рамках бесплатного тарифа, особенно для публичных репозиториев. Проверьте документацию своего провайдера: иногда сначала нужно поменять права на
/dev/kvm. - Пробные периоды облачных телефонов. Чтобы быстро посмотреть приложение на настоящей модели, ничего не устанавливая, бесплатный облачный телефон даёт 30 минут без карты.
Одно предупреждение. Сайты, которые предлагают бесплатный онлайн-эмулятор и просят загрузить APK без регистрации, передают вашу сборку неизвестно кому. Не загружайте туда релизные сборки и никогда не загружайте сборку с продакшен-ключами внутри. Если задача просто открыть приложение в браузере, безопаснее Android-эмулятор онлайн от провайдера, которого можно идентифицировать, а варианты сравнивает статья об эмуляторе Android в браузере.


