Содержание статьи
- Ставим
- Ubuntu
- Arch Linux
- Пробуем
- FAQ первопроходца
- Как нажать кнопку «Назад» и мотать страницы?
- Можно ли использовать Anbox для запуска проектов в Android Studio?
- Можно ли получить доступ к файловой системе работающего Android из Linux?
- Можно ли установить магазин приложений?
- Как разобрать образ Android Anbox?
- А можно ли использовать другой образ Android, например CyanogenMod?
- Чем Anbox отличается от Shashlik
- Как оно работает
- Выводы
Начнем с того, что Anbox — не эмулятор. Это система запуска полноценной среды Android прямо на текущем ядре Linux с возможностью вывода интерфейса каждого приложения в отдельном окне с поддержкой 3D-ускорения. Нечто вроде Wine, который запускает приложения Windows без необходимости запуска Windows в виртуальной машине, но без присущих Wine глюков и недоработок.
Два главных преимущества Anbox — скорость и бесшовная интеграция с десктопом. Приложения запускаются безо всяких прослоек и эмуляции. А самое главное — они работают быстро. Во второй части мы подробнее рассмотрим, как работает Anbox, а пока установим его и посмотрим, что это такое.
Ставим
В данный момент Anbox поддерживает исключительно процессоры архитектуры x86_64
и дистрибутивы Ubuntu 17.04, 16.10, 16.04, 14.04, а также Linux Mint, Neon и Elementary. Устанавливается либо с помощью самодостаточного пакета формата Snap, либо с помощью скрипта anbox-installer
. Но так как оба варианта работают одинаково, а первый менее универсален, рассмотрим только второй.
Ubuntu
Первое, что необходимо сделать, — это загрузить сам скрипт и дать ему права на исполнение:
$ wget https://raw.githubusercontent.com/anbox/anbox-installer/master/installer.sh -O anbox-installer
$ chmod +x anbox-installer
Далее запускаем скрипт:
$ sudo ./anbox-installer
Скрипт попросит написать в терминале I AGREE, после чего установит Anbox в систему и предложит перезагрузить машину. После перезагрузки в меню появится пункт Anbox.
Arch Linux
Anbox можно запустить не только в официально поддерживаемых дистрибутивах, но и в других линуксах, просто собрав его из исходников. Проще всего это сделать в Arch Linux, так как Anbox уже есть в AUR и весь процесс сборки можно автоматизировать.
Установим парочку необходимых для сборки пакетов:
$ sudo pacman -S linux-headers dkms
А затем соберем Anbox из AUR. Лучше сделать это с помощью AUR-клиента, такого как pacaur или yaourt:
$ yaourt -S anbox-image anbox-modules-dkms-git anbox-git
Далее загрузим необходимые модули ядра:
$ sudo modprobe binder_linux
$ sudo modprobe ashmem_linux
Запустим container manager:
$ sudo systemctl start anbox-container-manager.service
Запустим session manager:
$ anbox session-manager --gles-driver=host &
Готово. Можно кликать по иконке Anbox на рабочем столе или пойти путем джедая и запустить его прямо из терминала:
$ anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
Пробуем
Сразу после запуска ты увидишь на экране простейший «менеджер приложений», написанный специально для Anbox. Приложений тут кот наплакал: стандартные галерея, календарь, настройки и прочее, а вот маркета нет. И поэтому первое, о чем ты спросишь: а как ставить софт, братан?
И вот здесь начинается интересное. Разработчики Anbox не имеют права включать в поставку своего неэмулятора маркет и любой другой софт Google, в том числе сервисы Google, пока их «устройство» не пройдет сертификацию. Устройство пройти сертификацию не может — маркета не будет.
Но! В Anbox по умолчанию активирован режим отладки с помощью ADB (который в стандартном Android включается в настройках для разработчиков, куда еще надо добраться), поэтому установить приложение можно с его помощью. Установить сам ADB можно так:
$ sudo apt-get install android-sdk-platform-tools // Ubuntu
$ sudo pacman -S android-tools // Arch Linux
А теперь самое интересное: тебе надо найти и скачать пакет APK нужного приложения. Для этого можно использовать сайт apkpure. Далее остается всего лишь выполнить такую команду (пример для FX File Explorer):
$ adb install ~/Downloads/File Explorer_v5.1.1.0_apkpure.com.apk
Готово! Ставь приложения, развлекайся, до встречи. Шучу, на самом деле есть множество подводных камней. Например, сразу после установки Anbox я решил протестировать, как в нем работает Opera Mini, тот самый браузер, который умеет быстро отображать странички, даже если интернет до тебя доходит с помощью голубиной почты. Ведь для десктопа его нет.
В результате на экране появилось вот что:
$ 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. А вот со старым софтом могут возникнуть сложности, хотя обычно все заканчивается окном фиксированного размера.
Ну и третье. Anbox, выражаясь языком Шекспира, — это alpha software, то есть ребята нам как бы говорят: все будет плохо и нестабильно, а о таких вещах, как поддержка определения координат, камера и микрофон, ты можешь забыть. Более того, в некоторых случаях ты можешь забыть и об интернете, а session manager будет время от времени падать, и его придется перезапускать.
Зато! Anbox корректно определяет текущий уровень аккумулятора, размер оперативной памяти и даже жесткого диска (точнее, раздела /home
). Да и в целом работает быстро и не вызывает желания его снести. Количество пожираемой оперативки — всего 448 Мбайт при запущенном менеджере приложений.
FAQ первопроходца
Как нажать кнопку «Назад» и мотать страницы?
Кнопка «Назад» эмулируется с помощью 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?
Очень просто:
$ 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 лежит очень простая идея: если 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). Перед запуском Anbox загружает модули в ядро и добавляет правило udev для установки корректных прав доступа к устройствам /dev/binder
и /dev/ashmem
.
Каждое приложение в своем собственном окне Anbox размещает с помощью модифицированного композитного менеджера hwcomposer, который Android использует для наложения графических слоев. Hwcomposer запрашивает все слои каждого приложения и отдает их Anbox, который затем формирует индивидуальные окна для отдельно взятых приложений.
Все эти технические решения позволяют сделать 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–3 подготавливают Anbox и запускаются один раз, обычно при загрузке системы.
Такая архитектура позволяет сделать запуск приложений практически моментальным за счет небольшого (порядка 400 Мбайт) оверхеда по памяти в режиме простоя.
Выводы
Вне всяких сомнений, Anbox заслуживает внимания. Да, у него есть проблемы с совместимостью, он не умеет работать с твоей камерой и микрофоном, он падает. Но это альфа-версия, и для альфы она работает прекрасно.