Сегодня речь пойдет о запуске Android приложений на Linux системе без использования эмулятора.
Что такое Anbox
Анбокс — это что-то типа вайн, только для запуска андроид-приложений. Анбокс использует технологию контейнеризации, что позволяет запускать приложения на железе и ядре хоста с производительностью сравнимой с нативной. Для запуска приложений используются контейнеры LXC и (пока что) модули ядра, собираемые через DKMS.
От других эмуляторов отличается хорошей производительностью, опенсурсностью (ЖПЛв3), наличием под онтопиком и неплохой интеграцией с хостом. Ну как, интеграция с хостом определённо превосходит любые решения с ВМ и почти так же хороша, как в ARC.
Сразу после запуска вы увидите на экране простейший «менеджер приложений», написанный специально для Anbox. Приложений тут кот наплакал: стандартные галерея, календарь, настройки и прочее, а вот маркета нет. И поэтому первое, о чем вы спросите: а как ставить приложения на Anbox?
Менеджер приложений в Anbox
И вот здесь начинается интересное. Разработчики Анбох не имеют права включать в поставку своего неэмулятора маркет и любой другой софт Google, включая сервисы Google, пока их «устройство» не пройдет сертификацию. Устройство пройти сертификацию не может — маркета не будет.
Но! В Anbox по умолчанию активирован режим отладки с помощью ADB (который в стандартном Android включается в настройках для разработчиков, куда еще надо добраться), поэтому установить приложение можно с его помощью. Установить сам ADB можно так:
1 |
$ sudo apt-get install android-sdk-platform-tools // Ubuntu $ sudo pacman -S android-tools // Arch Linux |
А теперь самое интересное: тебе надо найти и скачать пакет APK нужного приложения. Для этого можно использовать сайт apkpure. Далее остается всего лишь выполнить такую команду (пример для FX File Explorer):
1 |
$ adb install ~/Downloads/File Explorer_v5.1.1.0_apkpure.com.apk FX File Explorer |
Готово! Ставь приложения, развлекайся, до встречи. Шучу, на самом деле есть множество подводных камней. Например, сразу после установки Anbox я решил протестировать, как в нем работает Opera Mini, тот самый браузер, который умеет быстро отображать странички, даже если интернет до тебя доходит с помощью голубиной почты. Ведь для десктопа его нет.
В результате на экране появилось вот что:
1 |
$ adb install ~/Downloads/Opera Mini fast web browser_v24.0.2254.115689_apkpure.com.apk Failed to install /home/j1m/Downloads/Opera Mini fast web browser_v24.0.2254.115689_apkpure.com.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] |
Объяснение этому простое: большая часть кода Opera Mini написана на C++, который скомпилирован в бинарник для платформы ARM. А так как в нашей машине процессор архитектуры x86_64, Android заботливо прибил приложение еще на этапе установки, чтобы мы не мучились, силясь понять, почему оно не работает.
На самом деле в маркете полно подобных приложений, и с несовместимостями архитектуры ты будешь встречаться довольно-таки часто.
Вторая интересная особенность запуска приложений в отдельных десктопных окнах: далеко не каждое приложение готово смириться с тем, что сейчас его личико будут жестко сжимать или растягивать. Большинство современных приложений в этом случае поведут себя корректно — Google позаботилась об этом, когда готовилась к реализации поддержки плавающих окон в Android 7.0. А вот со старым софтом могут возникнуть сложности, хотя обычно все заканчивается окном фиксированного размера.
Ну и третье. Анбокс, выражаясь языком Шекспира, — это alpha software, то есть ребята нам как бы говорят: все будет плохо и нестабильно, а о таких вещах, как поддержка определения координат, камера и микрофон, ты можешь забыть. Более того, в некоторых случаях ты можешь забыть и об интернете, а session manager будет время от времени падать, и его придется перезапускать.
Зато! Анбокс корректно определяет текущий уровень аккумулятора, размер оперативной памяти и даже жесткого диска (точнее, раздела /home). Да и в целом работает быстро и не вызывает желания его снести. Количество пожираемой оперативки — всего 448 Мбайт при запущенном менеджере приложений.
Приложения видят весь диск
FAQ Anbox
Как нажать кнопку «Назад» и мотать страницы?
Кнопка «Назад» эмулируется с помощью Esc. Клавиатуру также можно использовать для навигации по приложению (Tab и стрелки). Промотка либо колесиком, либо удержанием левой кнопки мыши и движением вниз-вверх.
Можно ли использовать Anbox для запуска проектов в Android Studio?
Да! Причем никаких дополнительных шагов для этого предпринимать не надо. Достаточно выбрать устройство с именем вида emulator-6663 при запуске проекта.
Можно ли получить доступ к файловой системе работающего Android из Linux?
Да, она находится в каталоге /var/lib/anbox/rootfs, но доступна только для чтения. Зато ты можешь просматривать содержимое приватных каталогов приложений (data/data).
Можно ли установить магазин приложений?
Теоретическая возможность установить Google Play Store существует. Для этого необходимо разобрать образ файловой системы Android и интегрировать в него GApps. Однако гораздо проще установить Yandex.Store или любой другой сторонний маркет. Плюс активировать установку из сторонних источников: Settings → Security → Unknown sources.
Как разобрать образ Android Anbox?
Очень просто:
1 |
$ sudo apt-get install squashfs-tools // Ubuntu $ sudo pacman -S squashfs-tools // Arch Linux $ unsquashfs -f -d /куда/распаковывать /var/lib/anbox/android.img |
А можно ли использовать другой образ Android, например CyanogenMod?
Нет. Есть две причины, почему это сделать нельзя. Первая — это должна быть сборка Android для x86_64. Вторая — эта сборка должна включать в себя специфические модификации Anbox.
Чем Anbox отличается от Shashlik
Shashlik запускает каждое приложение в эмуляторе. Другими словами, когда ты кликаешь по иконке приложения, запускается эмулятор, в нем — урезанная среда Android, а уже потом стартует приложение. Anbox гораздо более легковесный и производительный.
Как работает Anbox
В основе Anbox лежит очень простая идея: если Android — это виртуальная машина, работающая поверх ядра Linux, то почему бы не попробовать запустить приложения Android в окружении обычного дистрибутива Linux. Это очевидная идея, и она приходила в голову многим разработчикам с тех пор, как появился порт Android на x86. Некоторые программисты попытались реализовать ее через размещение окружения Android в chroot, но дальше полурабочих концептов дело не доходило (пример: ARC Welder).
У разработчиков Anbox ушло полтора года, чтобы довести проект до конца. Они смогли добиться интеграции приложений Android в десктоп Linux, обеспечить практически полную совместимость, а главное — сделать так, чтобы все это работало быстро, без сбоев и не требовало множества шагов для настройки.
Само окружение Android (на базе свежайшего Android 7.1.1, кстати) здесь замкнуто в песочницу, контролируемую с помощью технологии пространств имен (namespaces), той самой, что лежит в основе Docker. Пространства имен полностью отрезают окружение от среды дистрибутива Linux, а вся работа с оборудованием идет через демон anboxd. Для вывода картинки 3D-приложений используется специальный транслятор OpenGL ES → OpenGL, позаимствованный из официального эмулятора Android.
Ядро Linux также пришлось модифицировать, а точнее добавить в комплект Anbox модули с реализацией binder и ashmem, с помощью которых в Android взаимодействуют компоненты системы (IPC). Перед запуском Анбокс загружает модули в ядро и добавляет правило udev для установки корректных прав доступа к устройствaм /dev/binder и /dev/ashmem.
Каждое приложение в своем собственном окне Anbox размещает с помощью модифицированного композитного менеджера hwcomposer, который Android использует для наложения графических слоев. Hwcomposer запрашивает все слои каждого приложения и отдает их Anbox, который затем формирует индивидуальные окна для отдельно взятых приложений.
Все эти технические решения позволяют сделать Анбокс действительно быстрым, удобным в использовании и эффективным в плане расходования ресурсов «эмулятором». В том числе в 3D-приложениях.
Anbox состоит из двух компонентов: container manager и session manager.
Container manager управляет песочницами с работающим внутри окружением Android. Его задача — корректно запустить систему Android, поддерживать ее работу и корректно завершить.
Session manager, в свою очередь, отвечает за коммуникацию Android внутри песочницы и с основной системой Linux. Его задача — отвечать на запросы запуска приложений и распределять их по разным окнам.
В целом запуск приложения Android с помощью Anbox выглядит так:
- В ядро загружаются модули binder и ashmem.
- Запускается container manager, который разворачивает песочницу с Android внутри.
- Запускается session manager, он запускает среду Android.
- Юзер отдает команду на запуск приложения, которую принимает и обрабатывает session manager.
- Session manager ожидает команды.
Шаги 1–4 подготавливают Anbox и запускаются один раз, обычно при загрузке системы.
Такая архитектура позволяет сделать запуск приложений практически моментальным за счет небольшого (порядка 400 Мбайт) оверхеда по памяти в режиме простоя.
Выводы
Вне всяких сомнений, Anbox заслуживает внимания. Да, у него есть проблемы с совместимостью, он не умеет работать с твоей камерой и микрофоном, он падает. Но это альфа-версия, и для альфы она работает прекрасно.
Пока не смог решить с Анбоксом только одну мелкую проблему: запустить его хоть раз на своей Убунте.
Доброго времени суток!
Подскажите как на Anbox в Ubuntu 16.04 настроить сеть для игрушки? в браузере инет есть а игра требует WiFi и все/
Запустил работает Anbox — art of war 3.
Но нужен Google Play для восстановления прогресса в игре, как это реализовать?