Запуск Android программ в Linux

Google дал для своего детища ChromeOS, который по сути своей Linux, возможность запускать Android приложения. По иронии судьбы, Android — это то же Linux с Java машиной ART в новых версиях и Dalvik в старых. Теперь в Linux мы мучаемся с запуском программ, написанных для несколько иной Linux системы на кроссплатформенном языке Java. Технология называется App Runtime for Chrome или кратко ARC, которую разработали Кен Микстер (Ken Mixter) и Джош Вудвард (Josh Woodward).

Первые релизы ARC, которая ещё делает свои первые шаги, шли с ограничениями типа: работало некоторое количество приложений и только в ChromeOS. Разработчик НЕ из Google по имени Влад Филиппов ака vladikoff устранил ограничения и представил свою версию ARC под названием ARChon. Нам понадобится браузер Google Chrome старше 37 версии и всё что мы будем делать — это использовать API расширений Chrome. Гугловский ARC — это расширение. ARChon — расширение. Все программы Android, что вы установите — это расширения.

Если вы будете использовать ARChon, то вы замените Google ARC, но не удалите его. Так что процедура безболезненная и не опасная.

Установка Архона.

Предполагаю, что с установкой Google Chrome вы уже справились. Осталось зайти на ARChon Custom Runtime Guide и скачать нужной архитектуры ARChon. Скачав архив, распакуйте его.

И тут остановитесь. Минутка истории! Начиная c Chrome 35 для ОС MS Windows, Google решил запретить установку новых и работу прежде установленных расширений, размещённых НЕ в магазине Chrome WebStore. Потом был полный запрет сторонних расширений в мае 2014 года. Теперь чтобы установить стороннее расширение даже если вы ему доверяете, нужно провернуть несложный финт ушами.

Нам нужно в Терминале запустить Google Chrome вот так:

google-chrome --enable-easy-off-store-extension-install

Теперь через Инструменты -> Расширения можно добавить скачанный и распакованный Архон. Поставьте галочку «Режим разработчика» и нажмите «Загрузить распакованное расширение». Укажите на распакованный каталог Архона, игнорируя предупреждения.

Установка Android программ в Linux без проблем.

Сообщество подготовило обширный список программ, с указанием статуса работоспособности и URL. Вам осталось посетить онлайн электронную таблицу Chrome APK Official Apps List. Я никогда не кидал свиней в птиц и решил, что самое время проверить возможность работы Android программ в Linux'е на примере именно этой игрушки Angry Birds. Скачал, распаковал, добавил как расширение и запустил.

Установка Android программ в Linux через /dev/ass.

Как быть если на руках есть только пакет с Android программой в формате apk? Сначала проверьте в Chrome APK Official Apps List чтобы данная программа не была в красном цвете статуса Crash или Unusable. Я наивно полагал, что справлюсь с игрушкой Plants vs Zombies v1.2, но она обломала мне рога. И тут я вспомнил, что для популярной игры World of Tanks есть программа-помощник World of Tanks Assistant. Скачать apk из Google Play мне помог сайт apk-dl.com, выдав прямую ссылку на требуемое.

Теперь нам нужен инструмент chromeos-apk, который позволяет конвертировать пакет apk в удобоваримое расширение:

  • Ставим Node Package Manager:
    sudo apt-get install npm
  • Качаем node.js. Чтобы не заморачиваться с исходниками и не компилировать какой-либо софт в Убунту с пакетным менеджментом, выбираю Linux Binaries (.tar.gz). Распаковываю архив и запоминаю путь к нему. Бинарник node оказался у меня в /home/brovko_rs/temp/node/bin/
  • Обновляю до последней версии chromeos-apk
    sudo npm install -g chromeos-apk@latest
  • Перехожу в каталог с файлом ru.worldoftanks.mobile_1.8.2.apk и конвертирую, подсказывая где взять бинарник node:
    PATH=$PATH:/home/brovko_rs/temp/node/bin chromeos-apk ru.worldoftanks.mobile_1.8.2.apk

    Должно быть выдано подобное:

    Directory " ru.worldoftanks.mobile.android " created. Copy that directory onto your Chromebook and use "Load unpacked extension" to load the application.
  • Установка WoT Assistant в виде расширения через Инструменты -> Расширения закончилось неудачей, как до этого и Plants vs Zombies. Дело в том, что нужно из файла ru.worldoftanks.mobile.android/manifest.json взять строку
    "name": "ru.worldoftanks.mobile"

    и, превратив её в

    "message": "ru.worldoftanks.mobile"

    , добавить в файл ru.worldoftanks.mobile.android/_locales/en/messages.json в раздел extName


    "extName": {
    "description": "Extension name",
    "message": "ru.worldoftanks.mobile"
    }

    Теперь установка программы в виде расширения должна закончиться успешно. Это помогло WoT Assistant, но не помогло Plants vs Zombies, который установился, но продолжал к
    рашиться.

  • Можете закрепить Android программы в Unity Launcher, чтобы в дальнейшем быстро вызывать программу. Ведь никто визуально даже не догадается, как это запущено и как это работает. Главное работает!

Твики.

Программы в мире Android привыкли работать на мобильных устройства: смартфонах и планшетах. Окно программы вписывается в невидимое устройство и, если вам хочется сделать resize, чтобы было покрупнее, то это вполне можно сделать. В папке, которая содержит распакованный Archon есть 2 файла gen_main.min.js и gen_index.min.js
Найдите в них

tablet: {"long": 1280, "short": 800}

и подправьте под свои нужды.

Более действенно будет добавить

"resize": "scale"

в раздел arc_metadata в файле manifest.json у самого приложения. После всех манипуляций не забудьте Перезагрузить (Ctrl+R) расширение.

Если у приложения нет своего значка, то на панели Unity Launcher будет дефолтный значок зелёного робота. Самый простой способ сменить значок — это любой понравившийся значок положить в распакованную папку приложения, затерев там icon.png. Остальное произойдёт без вас автоматически.

Вот в принципе и всё! Если вам чего-то не хватало из мира Android и вы страстно хотели это запустить в своей Linux системе, то теперь есть реальный шанс сделать это.

Дополнительные материалы:
Проект по запуску Android приложений в Ubuntu.
Андроид программы в Ubuntu через AVD.
LXC 1.0: Более углублённое использование контейнера. Установка Android в контейнер LXC.

Автор: Roman Brovko