Виртуализация и эмуляция ОС на Android
Устройства Android имеют возможность запускать виртуальные машины или эмулировать другие операционные системы . Это делается либо посредством виртуализации настольных компьютеров , виртуализации платформы , либо эмуляции через уровень совместимости .
Виртуализация настольных компьютеров
[ редактировать ]Приложения для виртуализации настольных компьютеров требуют меньше ресурсов и места по сравнению с другими типами виртуализации, поскольку операционная система, отображаемая на устройстве Android, фактически находится на другом компьютере в локальной сети или где-либо еще, например, в Интернете. [1] В зависимости от того, как работает приложение виртуализации настольных компьютеров, они используют RDP или могут использовать другой собственный протокол. Для полноценной работы большинства бизнес-приложений виртуализации настольных компьютеров требуются определенные типы оборудования или услуг. Например, VMware Horizon Client требуется определенное оборудование VMware. для работы приложения [2]
Основным недостатком приложений виртуализации настольных компьютеров по сравнению с другими типами технологий виртуализации или эмуляции является то, что им требуется сетевое подключение к серверу, как указано ранее выше.
Виртуализация платформы
[ редактировать ]Виртуализация платформы дает разработчику больше возможностей, поскольку все, что относится к гостевой операционной системе, влияет только на гостевую операционную систему, а не на хостовую операционную систему. Благодаря этому гостевая операционная система может быть рутирована, тогда как хостовая операционная система остается нерутированной. [3] [4] Из-за характера виртуализации платформы и того факта, что она может виртуализировать корневую гостевую ОС, она имеет большее преимущество перед эмуляторами, поскольку может запускать приложения или использовать пакеты, требующие доступа к самой базовой системе.
Как и все программное обеспечение и приложения для виртуализации платформы, они занимают много ресурсов хоста для виртуализации. [4]
Эмуляция
[ редактировать ]Виды эмуляций
[ редактировать ]Эмуляция других операционных систем
[ редактировать ]Эмуляция других операционных систем на Android требует использования той или иной формы уровня совместимости, причем уровень совместимости должен использовать ту или иную форму технологий или API для запуска ОС внутри контейнера приложения. Это имеет ограничения, поскольку некоторые эмуляторы используют PROot, который представляет собой среду, похожую на chroot. [5] [6] В отличие от эмуляторов терминала, которые эмулируют внутреннюю ОС с поддержкой каких-либо пакетов расширений или без нее, он может устанавливать реальные (например) пакеты Ubuntu, поскольку не слишком сильно зависит от ограничений системы Android. Однако не все пакеты и приложения могут работать.
Эмуляция терминала внутренней операционной системы
[ редактировать ]Эмуляция терминала самого устройства Android выполняется либо посредством фактической локальной обратной связи с устройством, либо через эмуляцию, которая выглядит как локальная обратная связь. Большинство этих эмуляций терминала самого устройства используют библиотеку и функции встроенного терминала Toybox , которые есть в каждом устройстве Android. [7] [8] Однако из-за того, что большинство функций доступны без использования уровня совместимости, это означает, что можно использовать только функции Toybox. [9] Чтобы пользователь мог добавить какие-либо другие функции или библиотеки, ему потребуется получить root права на своем устройстве и добавить функции или библиотеки вручную. Некоторые из этих эмуляторов терминала позволяют пользователям неявно вводить команды Toybox, тогда как те, которые не требуют использования «КОМАНДЫ Toybox».
С улучшениями за счет полуэмуляции
[ редактировать ]Некоторые эмуляторы терминала, такие как Termux, позволяют пользователям добавлять пакеты. Это делается путем полуэмуляции другой среды с помощью PROot и/или Toybox во внутренней части. [8] Благодаря полуэмуляции некоторые предопределенные портированные пакеты можно использовать и устанавливать без необходимости рутирования устройства, поскольку они не используют системные файлы Android, а находятся и запускаются в собственных контейнерах и каталогах данных приложений. [10] Поскольку Toybox используется в основном во внутренней части, доступ к Toybox из полуэмулируемого расширенного терминала зависит от того, как было разработано приложение.
Расширения
[ редактировать ]Многие эмуляторы других ОС допускают использование расширений. Помимо использования стандартного SSH , некоторые эмуляторы позволяют использовать такие технологии, как VNC и XSDL . Используя эти расширения, пользователь может запустить эмулируемую/виртуализированную ОС в среде, похожей на настольный компьютер. [11] [12]
Ограничения
[ редактировать ]Большинство ограничений наблюдается в приложениях на основе эмуляции, а не в приложениях на основе виртуализации платформы, поскольку приложения эмуляции должны использовать уровень совместимости. Таким образом, чтобы библиотеки и пакеты работали должным образом, как в реальной ОС, уровень совместимости должен работать правильно и предоставлять точную информацию. Однако для этого необходимо, чтобы уровень совместимости или любое предопределенное программное обеспечение, которое он использует (например, Docker), имел доступ ко многим типам информации, связанной с системой и устройством. Это можно сделать либо с помощью Toybox, либо с помощью библиотек языков программирования, на основе которых можно создавать приложения Android (например, Java , C# ). Однако, начиная с Android 8, на приложения было наложено множество новых ограничений безопасности; из-за этих ограничений некоторые библиотеки/классы API больше не доступны или были заменены более ограничительными библиотеками/классами API. [13]
Одно из известных реализованных ограничений заключается в том, что приложения могут иметь доступ только к собственному корневому каталогу песочницы или подкаталогам на SD-карте. Приложения, которым требуется доступ к файлам или папкам за пределами SD-карты, должны использовать собственный системный селектор файлов Android. [14] Из-за этого ограничения гостевым ОС, работающим на приложениях эмуляции, виртуализации платформы или совместимости, больше не разрешен доступ к файлам за пределами их собственной песочницы SD-карты.
Большинство этих ограничений можно обойти, рутировав устройство Android. Однако использование Linux с помощью эмулятора или приложения виртуализации на этом этапе будет излишним, поскольку можно превратить само устройство в среду Linux. [15]
Улучшения внутренней безопасности ОС
[ редактировать ]Было замечено, что более современные версии Android имеют больше внутренних улучшений безопасности системы, например, некоторые системные папки и файлы больше не доступны или даже не доступны для просмотра во время существования этого каталога. Версии Android до 9 позволяли приложениям терминала просматривать корневой каталог Android «/» (но не разрешали модификацию или выполнение). [16] [17]
SELinux
[ редактировать ]Android использует SELinux ; из-за этого все файлы конфигурации системы недоступны для редактирования, а некоторые даже нечитабельны. [18] Таким образом, приложения могут использовать API Android только для получения информации о конфигурации или настройках устройства или системы. Однако не вся информация доступна приложениям; из-за этого многие уровни совместимости ОС или приложения эмуляции не могут запускать каждый пакет или приложение.
Вот некоторые известные приложения и пакеты, которые невозможно запустить:
- Для Udisks2 требуется udev, который не работает должным образом в большинстве сред уровня совместимости, как указано в подразделе ниже. [19] [20]
- Фыркать
- Открыть vSwitch
- mininet (для запуска требуется открытый vSwitch)
Вот некоторые команды, которые не работают из-за SELinux:
- IP-ссылка показать [21]
Использование ADB, PROot, $HOME и $PREFIX
[ редактировать ]Поскольку все приложения Android выполняются в непривилегированном контейнерном пространстве, приложения виртуализации или эмуляции должны использовать собственное пространство приложений для виртуализации или эмуляции. [22] Это можно сделать либо с помощью ADB, PRroot, либо с помощью $HOME и $PREFIX, однако большинство из этих трех используются приложениями эмуляции, поскольку приложения виртуализации платформы обычно используют разные методы. Каждый из них используется для разных целей. ADB используется для эмуляции терминальной среды для всей системы Android, но обычно в качестве непривилегированного пользователя. $HOME и $PREFIX могут использовать $HOME как «~», а $PREFIX — как «.». Однако $HOME нельзя установить за пределами каталога «/data/apps data space» в файловой системе Android, а $PREFIX нельзя переместить в другое место, например на SD-карту. [23]
Чтобы эмуляторы или уровни совместимости эмулировали или виртуализировали ОС Linux на Android, PROot . необходимо использовать [5] Однако при использовании PROot среда внутри Proot может действовать как среда Chroot и/или отдельная смонтированная среда. [24] [25] В этом сценарии (особенно в случае уровня совместимости и эмулятора для гостевых ОС) существуют пакеты и приложения, которые не могут быть запущены, поскольку они никогда не были предназначены для работы в среде, подобной chroot. [6] Некоторые из них являются хорошо известными и известными пакетами, приложениями или командами, включая следующие:
- Системад
- Либудев (Работает вместе с Systemd). [26]
- Нагревать
- Mutter (программное обеспечение) опирается на systemd
Альтернативы
[ редактировать ]Из-за проблем с SeLinux и PROot необходимо использовать альтернативы, и не для всех непригодных для использования пакетов или приложений есть альтернативы. Будучи альтернативой, они не обязательно обладают всеми функциями исходных пакетов или приложений. Некоторые из этих альтернатив включают в себя:
Сам Android, включая модифицированное ядро Linux
[ редактировать ]Поскольку Android использует модифицированное ядро Linux, не все файлы конфигурации и системы существуют или одинаковы в Android. [27] [28] По этой причине приложениям-эмуляторам необходимо либо предоставлять собственную версию конфигурации или системные файлы в пространстве данных приложения, либо использовать предварительно модифицированный дистрибутив портированных библиотек Linux, которые не требуют использования отсутствующих файлов конфигурации или системных файлов. или не поддерживать использование этих пакетов. Некоторые известные конфигурационные и системные файлы, которых нет в Android, включают:
- /etc/resolv.conf [23]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Эванс, Джонни (28 января 2019 г.). «Как запустить Windows 10 на iPad Pro или на Android» . Компьютерный мир . Проверено 20 ноября 2019 г.
- ^ «Опубликованные приложения | Horizon Apps» . ВМваре . Проверено 20 ноября 2019 г.
- ^ «VMOS позволяет запустить виртуальную машину Android на вашем телефоне» . xda-разработчики . 08.08.2019 . Проверено 20 ноября 2019 г.
- ^ Перейти обратно: а б Доффман, Зак. «Huawei Mate 30: новая опция Google Play уже здесь» . Форбс . Проверено 20 ноября 2019 г.
- ^ Перейти обратно: а б «AnLinux: запуск Linux на Android без root-доступа – приложения в Google Play» . play.google.com . Проверено 21 ноября 2019 г.
- ^ Перейти обратно: а б Фермер, Брейден (28 января 2017 г.). «Руководство: установка и запуск среды GNU/Linux на любом устройстве Android» . xda-разработчики . Проверено 21 ноября 2019 г.
- ^ «Автономные цепочки инструментов | Android NDK» . Android-разработчики . Проверено 20 ноября 2019 г.
- ^ Перейти обратно: а б «README — платформа/внешний/игрушечный ящик — Git в Google» . android.googlesource.com . Проверено 20 ноября 2019 г.
- ^ «README — платформа/внешний/игрушечный ящик — Git в Google» . android.googlesource.com . Проверено 20 ноября 2019 г.
- ^ комментарии, 15 мая 2018 г. Пол Бэйли Feed 178up 5. «Termux превращает Android в среду разработки Linux» . Opensource.com . Проверено 21 ноября 2019 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «UserLAnd, Linux под ключ в вашем кармане | Журнал Linux» . www.linuxjournal.com . Проверено 20 ноября 2019 г.
- ^ То, Маянк Шарма Хау (июнь 2016 г.). «Как установить Linux на телефон Android» . ТехРадар . Проверено 20 ноября 2019 г.
- ^ «Примечания к выпуску Android 9» . Проект Android с открытым исходным кодом . Проверено 20 ноября 2019 г.
- ^ «Примечания к выпуску Android 10» . Проект Android с открытым исходным кодом . Проверено 20 ноября 2019 г.
- ^ «Установка Linux на телефон Android» . Разработчик Red Hat . 16 марта 2017 г. Проверено 20 ноября 2019 г.
- ^ «Схема разделов» . Проект Android с открытым исходным кодом . Архивировано из оригинала 24 декабря 2019 г. Проверено 20 ноября 2019 г.
- ^ «Примечания к выпуску Android 9» . Проект Android с открытым исходным кодом . Проверено 20 ноября 2019 г.
- ^ «Linux с повышенной безопасностью в Android» . Проект Android с открытым исходным кодом . Проверено 20 ноября 2019 г.
- ^ «Ошибка установки Apt-Get — ошибка Udisks2 Permission Denied приводит к большому количеству ошибок DPKG · Проблема № 992 · CypherpunkArmory/UserLAnd» . Гитхаб . Проверено 20 ноября 2019 г.
- ^ «[Полное руководство💻] Установка Parrot OS на Android» . AndroPalac.com . 09.10.2019 . Проверено 20 ноября 2019 г.
- ^ «Как изменить MAC-адрес на устройствах Android без рута?» . Исследовательские ворота . Проверено 20 ноября 2019 г.
- ^ «Примечания к выпуску Android 9» . Проект Android с открытым исходным кодом . Проверено 20 ноября 2019 г.
- ^ Перейти обратно: а б «Отличия от Linux — Termux Wiki» . wiki.termux.com . Проверено 20 ноября 2019 г.
- ^ «Страница руководства Ubuntu: PROot — chroot, mount --bind и binfmt_misc без привилегий/настройки» . manpages.ubuntu.com . Проверено 20 ноября 2019 г.
- ^ «Debian — Подробная информация о пакете proot в sid» . packages.debian.org . Проверено 20 ноября 2019 г.
- ^ «удев — ArchWiki» . wiki.archlinux.org . Проверено 20 ноября 2019 г.
- ^ «Безопасность системы и ядра» . Проект Android с открытым исходным кодом . Проверено 21 ноября 2019 г.
- ^ «Действительно ли Android использует то же ядро, что и Linux?» . Обмен стеками Unix и Linux . Проверено 21 ноября 2019 г.