вторник, 15 июня 2021 г.

Anbox - простой и эффективный эмулятор Android | Установка и настройка

 


Приветствую. Тема запуска приложений с Android на других операционных системах или устройствах, пожалуй, будет актуальна всегда. Даже Microsoft обещает уже в этом году добавить возможность запуска Андроидового софта в Windows 10. Ну а я в свою очередь расскажу об одном из способов запуска оного в десктопных дистрибутивах Linux - с помощью проекта Anbox.

Что такое Anbox? Anbox (Android in a Box) представляет из себя урезанную версию Android, запускаемую в изолированном контейнере LXC (Linux Containers), связанную с хост-системой посредством двух драйверов, добавленных в ванильное ядро Linux - binderfs и ashmem. Первый является реализацией механизма межпроцессного взаимодействия, применяемого в Android для обеспечения связи между приложениями и системными процессами (аналог в десктопном Linux - D-Bus). Второй является реализацией механизма разделяемой памяти, с помощью которой процессы внутри системы могут использовать общие ресурсы. Это что-то вроде облачного хранилища, в котором несколько пользователей хранят свои файлы и могут пользоваться файлами других людей. Работа Anbox реализована с помощью двух программ - менеджера контейнеров, который берёт на себя всю низкоуровневую работу по запуску контейнера с Android и поддержания его стабильной работы, и менеджера сеансов, который обеспечивает взаимодействие Android с хост окружением вашего дистрибутива, интеграцию окон приложений с вашим оконным менеджером, работу сети и так далее. Схематически это выглядит так:

Таким образом Anbox технически не является эмулятором Android, и даже виртуальной машиной, поскольку запущенная внутри него версия Android использует ресурсы вашего компьютера напрямую, ограничиваясь лишь рамками контейнера LXC. Сейчас это распространённое решение, и тот же BlueStacks также использует в себе урезанный вариант Android, хотя и работа оного реализована иначе. Потому эмулятором я его назвал лишь из практических целей :)

Несмотря на то, что автор Anbox ушёл делать его проприетарную версию для Ubuntu Cloud, сообщество продолжает поддержку и развитие оригинального Anbox. Исходный код доступен здесь.

Установка

Установку покажу на примере Debian/Ubuntu и производных. Установить Anbox можно двумя путями: используя штатный репозиторий дистрибутива, или с помощью Snap.

Первый способ ничем не отличается от обычной установки программ с использованием менеджера приложений или терминала. В случае терминала достаточно выполнить команду:

sudo apt install anbox

Второй способ более универсален и является официальным. Для его установки вам потребуется установить пакетный менеджер Snap (если вы не пользуетесь Ubuntu) и затем установить Anbox:

sudo apt install snapd

snap install --devmode --edge anbox

Режим --devmode используется по причине того, что Anbox всё ещё в стадии активной разработки, и пока не поддерживает все возможности по изоляции приложений, предоставляемые Snap. Как побочный эффект - не будет работать автоматическое обновление, поэтому для обновления Anbox, установленного через Snap, потребуется использовать команду:

snap refresh --edge --devmode anbox

Но это половина дела. Далее нам необходимо скачать образ операционной системы Android, который будет использоваться для запуска приложений этой ОС. Последняя на данный момент версия образа - 7.1. Его нужно разместить в каталоге /var/lib/anbox под именем android.img:

wget https://build.anbox.io/android-images/2018/07/19/android_amd64.img

sudo mv android_amd64.img /var/lib/anbox/android.img

Теперь нужно немного подправить один из сервисов systemd, чтобы корректно работал менеджер приложений Anbox:

Далее для редактирования файлов я буду использовать консольный текстовый редактор nano. Сохранение файла в неё осуществляется комбинацией Ctrl+O, Enter, а выход из редактора - Ctrl+X. Вы можете использовать любой на своё усмотрение.

sudo nano /usr/lib/systemd/user/anbox-session-manager.service

Перед строкой "ExecStart" поместите строку Environment="DISPLAY=:0", чтобы выглядело так:

[Unit]
Description=Anbox Session Manager
Documentation=man:anbox(1)

[Service]
Environment="DISPLAY=:0"
ExecStart=/usr/bin/anbox session-manager

[Install]
WantedBy=default.target

Запускаем и активируем необходимые сервисы:

systemctl start anbox-container-manager.service

systemctl --user enable anbox-session-manager.service

systemctl --user start anbox-session-manager.service

Теперь желательно перезагрузиться. Проверяем статус сервисов Anbox:


В меню приложений находим Anbox Launcher и запускаем:



Установка Google Play и поддержки приложений ARM

В Anbox возможно устанавливать приложения двумя способами: посредством ADB, устанавливая скачанный apk-файл, либо традиционно через Play Market. Также возможно активировать поддержку запуска приложений для архитектуры ARM, использую библиотеку libhoudini, применяемую в Android x86. Упростить всё это поможет вот этот скрипт, однако для его корректной работы нужно провести одну манипуляцию. А именно создать каталог для размещения дополнительного конфига systemd, который переопределит параметры запуска Anbox:

sudo mkdir -p  /etc/systemd/system/anbox-container-manager.service.d

sudo touch /etc/systemd/system/anbox-container-manager.service.d/override.conf

sudo apt install wget curl lzip tar unzip squashfs-tools

wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh

chmod +x install-playstore.sh

Теперь запускаем скрипт от имени администратора и ждём окончания установки:

sudo ./install-playstore.sh

После этого открываем Anbox Launcher, переходим в настройки (Settings -> Apps -> Google Play Services -> Permissions) и даём разрешения для Google Play Services:



Далее запускаем Play Market, входим под своей учётной записью и пробуем установить требуемые программы:



Помните: многие программы определяют Anbox в лучшем случае как кастомный ROM, поэтому стабильная работа не гарантируется. В комментариях напишите, какой софт установили вы и насколько хорошо он работал. До встречи!

3 комментария:

  1. Спасибо за информативную статью

    ОтветитьУдалить
  2. Анонимный17 июня 2021 г., 16:34

    Что-то пошло не так. У меня пустой файл на этапе редактирования
    /usr/lib/systemd/user/anbox-session-manager.service
    Что это значит?

    ОтветитьУдалить