Los dispositivos Android tienen la capacidad de ejecutar máquinas virtuales o emular otros sistemas operativos . Esto se logra mediante virtualización de escritorio , virtualización de plataforma o emulación a través de una capa de compatibilidad .
Virtualización de plataforma
La virtualización de plataformas ofrece mayor control al desarrollador, ya que todo lo relacionado con el sistema operativo invitado solo afecta a este, y no al sistema operativo anfitrión. Por ello, es posible que el sistema operativo invitado tenga acceso de superusuario (root), mientras que el sistema operativo anfitrión permanece sin él. [ 1 ] [ 2 ] Debido a la naturaleza de la virtualización de plataformas y a su capacidad para virtualizar un sistema operativo invitado con acceso de superusuario, ofrece una mayor ventaja sobre los emuladores, ya que permite ejecutar aplicaciones o utilizar paquetes que requieren acceso al sistema subyacente.
Al igual que con todo el software y las aplicaciones de virtualización de plataformas, consumen muchos recursos del host para realizar la virtualización. [ 2 ]
Emulación
Tipos de emulaciones
Emulación de otros sistemas operativos
La emulación de otros sistemas operativos en Android requiere el uso de una capa de compatibilidad, la cual debe utilizar tecnologías o API para ejecutar el sistema operativo dentro del contenedor de la aplicación. Esto presenta limitaciones, ya que algunos emuladores utilizan PRoot, un entorno similar a chroot. [ 3 ] [ 4 ] A diferencia de los emuladores de terminal que emulan el sistema operativo interno con o sin soporte para paquetes de extensión, puede instalar paquetes reales (por ejemplo, de Ubuntu), ya que no depende demasiado de las limitaciones del sistema Android. Sin embargo, no todos los paquetes y aplicaciones pueden ejecutarse.
Emulación de terminal del sistema operativo interno
La emulación de terminal del dispositivo Android se realiza mediante un bucle local real al dispositivo o una emulación que simula un bucle local. La mayoría de estas emulaciones de terminal utilizan la biblioteca y las funciones de la cadena de herramientas nativa Toybox que viene con cada dispositivo Android. [ 5 ] [ 6 ] Sin embargo, debido a que la mayoría de las funciones están disponibles sin utilizar una capa de compatibilidad, solo se pueden utilizar las funciones de Toybox. [ 7 ] Para que un usuario agregue otras funciones o bibliotecas, tendría que rootear su dispositivo y agregarlas manualmente. Algunos de estos emuladores de terminal permiten a los usuarios ingresar comandos de Toybox implícitamente, mientras que los que no lo permiten requieren el uso de "toybox COMMAND".
Con mejoras a través de semi-emulación
Algunos emuladores de terminal como Termux permiten a los usuarios agregar paquetes. Esto se hace mediante la semi-emulación de un entorno diferente a través del uso de PRoot y/o Toybox en el back-end. [ 6 ] Con la semi-emulación, algunos paquetes portados predefinidos se pueden usar e instalar sin necesidad de rootear el dispositivo, ya que no utilizan archivos del sistema Android y residen y se ejecutan en los propios contenedores y directorios de datos de las aplicaciones. [ 8 ] Dado que Toybox se usa principalmente en el back-end, depende de cómo se haya desarrollado la aplicación para que se pueda acceder a Toybox desde la terminal mejorada semi-emulada.
Extensiones
Muchos emuladores de otros sistemas operativos permiten el uso de extensiones. Además del uso de SSH estándar , algunos emuladores permiten el uso de tecnologías como VNC y XSDL . Mediante el uso de estas extensiones, el usuario puede ejecutar el sistema operativo emulado/virtualizado en un entorno similar al de un escritorio. [ 9 ] [ 10 ]
Limitaciones
La mayoría de las limitaciones se observan en las aplicaciones basadas en emulación, más que en las basadas en virtualización de plataforma, ya que las aplicaciones de emulación deben utilizar una capa de compatibilidad. Por lo tanto, para que las bibliotecas y los paquetes funcionen como se espera en un sistema operativo real, la capa de compatibilidad debe funcionar correctamente y proporcionar información precisa. Sin embargo, esto requiere que la capa de compatibilidad o cualquier software predefinido que utilice (por ejemplo, Docker) tenga acceso a muchos tipos de información relacionada con el sistema y el dispositivo. Esto se puede lograr mediante Toybox o bibliotecas de lenguajes de programación a partir de las cuales se pueden crear aplicaciones de Android (por ejemplo, Java , C# ). Sin embargo, a partir de Android 8, se han impuesto muchas restricciones de seguridad nuevas a las aplicaciones; debido a estas restricciones, algunas bibliotecas/clases de API ya no están disponibles o han sido reemplazadas por bibliotecas/clases de API más restrictivas. [ 11 ]
Una de las limitaciones conocidas que se implementó es que las aplicaciones solo pueden acceder de forma nativa a su propio directorio raíz de sandbox o subdirectorios en una tarjeta SD . Las aplicaciones que desean acceder a archivos o carpetas fuera de ese en la tarjeta SD, deben usar el selector de archivos del sistema propio de Android. [ 12 ] Debido a esta limitación, los sistemas operativos invitados que se ejecutan en emulación, virtualización de plataforma o aplicaciones de compatibilidad ya no pueden acceder a archivos fuera de su propio Sandbox de la tarjeta SD.
La mayoría de estas limitaciones se pueden sortear rooteando el dispositivo Android. Sin embargo, en ese caso, utilizar Linux mediante un emulador o una aplicación de virtualización sería redundante, ya que se podría convertir el propio dispositivo en un entorno Linux. [ 13 ]
Mejoras de seguridad interna del sistema operativo
Se ha observado que las versiones más modernas de Android incorporan mejoras de seguridad internas, de modo que algunas carpetas y archivos del sistema ya no son accesibles ni visibles debido a la existencia de dicho directorio. Las versiones de Android anteriores a la 9 permitían a las aplicaciones de terminal ver el directorio raíz "/" de Android (aunque no permitían modificaciones ni ejecución). [ 14 ] [ 15 ]
SELinux
Android utiliza SELinux ; por ello, todos los archivos de configuración del sistema no son editables y algunos ni siquiera son legibles. [ 16 ] De este modo, las aplicaciones solo pueden utilizar las API de Android para obtener información sobre la configuración del dispositivo o del sistema. Sin embargo, no toda la información está disponible para las aplicaciones; por consiguiente, muchas capas de compatibilidad del sistema operativo o aplicaciones de emulación no pueden ejecutar todos los paquetes o aplicaciones.
A continuación se muestran algunas aplicaciones y paquetes conocidos que no pueden ejecutarse:
- Udisks2 requiere udev, que no funciona bien en la mayoría de los entornos de capa de compatibilidad, como se indica en la subsección siguiente. [ 17 ] [ 18 ]
- Bufido
- Open vSwitch
- mininet (requiere un vSwitch abierto para funcionar)
Aquí hay algunos comandos que no funcionan debido a SELinux:
- ip link show [ 19 ]
Uso de ADB, PRoot, $HOME y $PREFIX
Debido a que todas las aplicaciones de Android se ejecutan en un espacio contenedor no privilegiado, las aplicaciones de virtualización o emulación deben utilizar su propio espacio de aplicación para realizar la virtualización o emulación. [ 20 ] Esto se puede hacer mediante ADB, PRroot o el uso de $HOME y $PREFIX; sin embargo, la mayoría de estos tres métodos son utilizados por aplicaciones de emulación, ya que las aplicaciones de virtualización de plataforma suelen utilizar métodos diferentes. Cada uno de ellos se utiliza para un propósito diferente. ADB se utiliza para emular un entorno similar a un terminal para todo el sistema Android, pero generalmente como un usuario sin privilegios. $HOME y $PREFIX se pueden usar como "~" y $PREFIX como "." Sin embargo, $HOME no se puede establecer fuera del directorio "/data/apps data space" en el sistema de archivos de Android , ni se puede mover $PREFIX a otro lugar como la tarjeta SD. [ 21 ]
Para que los emuladores o capas de compatibilidad emulen o virtualicen un sistema operativo basado en Linux en Android, se debe usar PRoot . [ 3 ] Sin embargo, cuando se usa PRoot, el entorno dentro de PRoot puede actuar como un entorno Chroot y/o un entorno montado separado. [ 22 ] [ 23 ] En este escenario (especialmente en el caso de capas de compatibilidad y emuladores para sistemas operativos invitados), hay paquetes y aplicaciones que no pueden ejecutarse, ya que nunca fueron diseñados para ejecutarse dentro de un entorno tipo chroot. [ 4 ] Algunos de estos son paquetes, aplicaciones o comandos bien conocidos y prominentes, incluidos los siguientes:
- Sistema
- Libudev (Funciona junto con Systemd). [ 24 ]
- Inicializar
- Mutter (software) depende de systemd.
Alternativas
Debido a problemas con SeLinux y PRoot, es necesario utilizar alternativas, y no todos los paquetes o aplicaciones inutilizables cuentan con ellas. Al ser alternativas, no necesariamente poseen todas las funciones de los paquetes o aplicaciones originales. Algunas de estas alternativas incluyen:
Android en sí mismo, incluyendo un kernel de Linux modificado.
Debido a que Android utiliza un kernel de Linux modificado , no todos los archivos de configuración o del sistema existen o son iguales en Android. [ 25 ] [ 26 ] Por esta razón, las aplicaciones de emulación deben proporcionar su propia versión de los archivos de configuración o del sistema en el espacio de datos de la aplicación, usar una distribución premodificada de bibliotecas de Linux portadas que no requieran el uso de los archivos de configuración o del sistema faltantes, o no admitir el uso de esos paquetes. Algunos archivos de configuración y del sistema conocidos que no están en Android incluyen:
- /etc/resolv.conf [ 21 ]
Véase también
Referencias
- ↑ "VMOS te permite ejecutar una máquina virtual Android en tu teléfono" . xda-developers . 8 de agosto de 2019. Consultado el 20 de noviembre de 2019 .
- 1 2 Doffman, Zak. "Huawei Mate 30: Ya está aquí la nueva opción de Google Play" . Forbes . Consultado el 20 de noviembre de 2019 .
- 1 2 "AnLinux : Ejecuta Linux en Android sin acceso root - Aplicaciones en Google Play" . play.google.com . Consultado el 21/11/2019 .
- 1 2 Farmer, Braden (2017-01-28). "Guía: Instalación y ejecución de un entorno GNU/Linux en cualquier dispositivo Android" . xda-developers . Recuperado el 2019-11-21 .
- ↑ "Cadenas de herramientas independientes | Android NDK" . Desarrolladores de Android . Consultado el 20 de noviembre de 2019 .
- 1 2 "README - platform/external/toybox - Git en Google" . android.googlesource.com . Consultado el 20 de noviembre de 2019 .
- ↑ "README - platform/external/toybox - Git en Google" . android.googlesource.com . Consultado el 20 de noviembre de 2019 .
- ↑ comentarios, 15 de mayo de 2018 Paul Bailey Feed 178up 5. "Termux convierte Android en un entorno de desarrollo Linux" . Opensource.com . Consultado el 21 de noviembre de 2019 .
{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) - ↑ "UserLAnd, un Linux listo para usar en tu bolsillo | Linux Journal" . www.linuxjournal.com . Consultado el 20 de noviembre de 2019 .
- ↑ A, Avinash Mittal How (abril de 2023). "Vps para emulador de Android" . PetroSky . Recuperado el 20 de noviembre de 2024 .
- ↑ "Notas de la versión de Android 9" . Proyecto de código abierto de Android . Consultado el 20 de noviembre de 2019 .
- ↑ "Notas de la versión de Android 10" . Proyecto de código abierto de Android . Consultado el 20 de noviembre de 2019 .
- ↑ "Instalación de Linux en un teléfono Android" . Red Hat Developer . 16 de marzo de 2017. Consultado el 20 de noviembre de 2019 .
- ↑ "Partition Layout" . Proyecto de código abierto de Android . Archivado del original el 24/12/2019 . Consultado el 20/11/2019 .
- ↑ "Notas de la versión de Android 9" . Proyecto de código abierto de Android . Consultado el 20 de noviembre de 2019 .
- ↑ "Seguridad mejorada en Linux para Android" . Proyecto de código abierto de Android . Consultado el 20 de noviembre de 2019 .
- ↑ "Apt-Get Install falla: el error Udisks2 Permission Denied provoca muchos errores de DPKG · Problema n.º 992 · CypherpunkArmory/UserLAnd" . GitHub . Consultado el 20 de noviembre de 2019 .
- ↑ " [ Tutorial completo 💻 ] Instalar Parrot OS en Android" . AndroPalac.com . 09/10/2019. Archivado del original el 30/10/2019 . Consultado el 20/11/2019 .
- ↑ "¿Cómo puedo cambiar la dirección MAC en dispositivos Android sin acceso root?" . ResearchGate . Consultado el 20 de noviembre de 2019 .
- ↑ "Notas de la versión de Android 9" . Proyecto de código abierto de Android . Consultado el 20 de noviembre de 2019 .
- 1 2 "Diferencias con Linux - Termux Wiki" . wiki.termux.com . Consultado el 20 de noviembre de 2019 .
- ↑ "Ubuntu Manpage: PRoot - chroot, mount --bind y binfmt_misc sin privilegios/configuración" . manpages.ubuntu.com . Consultado el 20 de noviembre de 2019 .
- ↑ "Debian -- Detalles del paquete proot en sid" . packages.debian.org . Consultado el 20 de noviembre de 2019 .
- ↑ «udev-ArchWiki» . wiki.archlinux.org . Consultado el 20 de noviembre de 2019 .
- ↑ "Seguridad del sistema y del núcleo" . Proyecto de código abierto de Android . Consultado el 21 de noviembre de 2019 .
- ↑ "¿Android realmente usa el mismo núcleo que Linux?" . Unix & Linux Stack Exchange . Consultado el 21/11/2019 .
- Software Android (sistema operativo)
- Software de virtualización
- Software de emulación