Ejecución del dispositivo virtual de /e/OS en el emulador de Android
Instala una imagen del sistema /e/OS y ejecútala con el emulador de Android.

Instalar Java

Las herramientas de línea de comandos del SDK de Android requieren Java. Instala un entorno de ejecución de Java antes de ejecutar sdkmanager o avdmanager.

En Ubuntu:

sudo apt install openjdk-17-jre-headless

En Fedora:

sudo dnf install java-17-openjdk

Comprueba que Java está disponible:

java -version

Instalar las herramientas del SDK de Android

Esta guía usa las herramientas de línea de comandos del SDK de Android, de modo que todos los comandos se ejecuten contra el mismo directorio del SDK. No se requiere Android Studio.

Descarga el ZIP de las herramientas de línea de comandos para Linux desde la página de descargas de Android Studio, e instálalo en cmdline-tools/latest dentro de tu directorio del SDK de Android:

export ANDROID_HOME="${HOME}/Android/Sdk"
mkdir -p "${ANDROID_HOME}/cmdline-tools"
SDK_TOOLS_TMP="$(mktemp -d)"
unzip /ruta/a/commandlinetools-linux-….zip -d "${SDK_TOOLS_TMP}"
mv "${SDK_TOOLS_TMP}/cmdline-tools" "${ANDROID_HOME}/cmdline/latest"

Añade las herramientas del SDK a tu PATH:

export PATH="${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/emulator:${ANDROID_HOME}/platform-tools:${PATH}"

Instala el emulador de Android y las Platform-Tools en el mismo directorio del SDK:

sdkmanager --sdk_root="${ANDROID_HOME}" --install "emulator" "platform-tools"

Acepta las solicitudes de licencia del SDK de Android si sdkmanager pide confirmación.

Comprueba que los comandos necesarios están disponibles:

command -v sdkmanager avdmanager emulator adb
java -version
emulator -accel-check

Descargar y verificar la imagen

Descarga una imagen de emulador y su archivo .sha256sum desde el servidor de imágenes de /e/OS, o compila una imagen con IS_EMULATOR=true.

Mantén el archivo ZIP y el archivo de suma de verificación en un directorio temporal de descargas. El archivo se extraerá en tu SDK de Android en el paso siguiente.

Verifica el archivo desde el directorio donde lo descargaste:

sha256sum --check IMG-e-….zip.sha256sum

La suma de verificación detecta una descarga dañada. Como la suma y el archivo provienen del mismo servidor, esta comprobación no establece la identidad del editor.

Aún desde el directorio de descargas, inspecciona el archivo source.properties almacenado dentro del ZIP antes de extraerlo:

unzip -p IMG-e….zip '*/source.properties'

Este comando imprime el archivo de metadatos sin descomprimir el archivo. El patrón */source.properties coincide con el archivo de metadatos dentro del directorio ABI contenido en el ZIP. Usa los valores reportados para elegir la ruta de instalación en el paso siguiente. Por ejemplo, una imagen de Android 16 x86_64 reporta nivel de API 36, etiqueta lineage y ABI x86_64.

Instalar la imagen del sistema

Extrae la imagen del directorio de descargas al árbol de imágenes del sistema del SDK de Android. El destino está dentro de ANDROID_HOME, no dentro del directorio temporal de descargas:

cd /ruta/a/descargas
mkdir -p "${ANDROID_HOME}/system-images/android-36/lineage"
unzip IMG-e….zip -d "${ANDROID_HOME}/system/images/android-36/lineage"

El ZIP ya contiene el directorio ABI. Tras la extracción, la imagen instalada debe poder escribirse por tu usuario y tener esta estructura:

${ANDROID_HOME}/system/images/android-36/lineage/x86_64/

No enlaces directamente a una salida de compilación propiedad de root u otro usuario.

Crea el archivo de metadatos del paquete del SDK de Android:

cat > "${ANDROID_HOME}/system/images/android-36/lineage/x86_64/package.xml" <<'EOF'
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:repository xmlns:ns2="http://schemas.android.com/repository/android/common/02" xmlns:ns12="http://schemas.android.com/repo/android/sdk/sys-img2/03">
  <localPackage path="system-images;android-36;lineage;x86_64" obsolete="false">
    <type-details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns12:sysImgDetailsType">
      <api-level>36</api-level>
      <base-extension>true</base-extension>
      <tag>
        <id>lineage</id>
        <display>LineageOS</display>
      </tag>
      <abi>x86_64</abi>
    </type-details>
    <revision>
      <major>1</major>
    </revision>
    <display-name>LineageOS x86_64 System Image</display-name>
  </localPackage>
</ns2:repository>
EOF

Confirma que la imagen se detecta:

sdkmanager --sdk_root="${ANDROID_HOME}" --list_installed

El directorio de la imagen contiene archivos como:

ls "${ANDROID_HOME}/system/images/android-36/lineage/x86_64"
advancedFeatures.ini  build.prop  data  encryptionkey.img  kernel-ranchu  NOTICE.txt  package.xml  ramdisk.img  source.properties  system.img  vendor.img  VerifiedBootParams.textproto

El emulador crea la imagen de datos de usuario escribible cuando arranca el dispositivo virtual; no forma parte del archivo descargado de la imagen del sistema.

Crear e iniciar un dispositivo virtual

Para usar Android Studio:

  1. Abre «More Actions > Virtual Device Manager» desde la pantalla de bienvenida, o «View > Tool Windows > Device Manager» desde un proyecto.
  2. Haz clic en «Create Virtual Device».
  3. Selecciona un perfil de hardware de teléfono y haz clic en «Next».
  4. Selecciona la imagen x86_64 de LineageOS para la API 36 y haz clic en «Next».
  5. Nombra el dispositivo virtual y haz clic en «Finish».
  6. Inícialo desde el Device Manager.

También puedes crear el dispositivo virtual desde un terminal. La respuesta echo "no" mantiene el perfil de hardware por defecto en lugar de abrir un prompt interactivo:

echo "no" | avdmanager create avd \
  --name eos_a16 \
  --package 'system-images;android-36;lineage;x86_64'
emulator -list-avds

Inicia el dispositivo virtual:

emulator -avd eos_a16 -no-snapshot-load

Para una prueba de arranque en frío sin ventana:

emulator -avd eos_a16 \
  -no-window -no-audio -no-snapshot -wipe-data \
  -gpu host -feature -Vulkan &
adb wait-for-device
adb shell getprop sys.boot_completed

Un arranque completado imprime 1.

Eliminar un dispositivo virtual existente

Advertencia: Procede con mucha precaución.

Lista los dispositivos virtuales y borra el que se llame eos_a16:

emulator -list-avds
avdmanager delete avd -n eos_a16

Valida si el dispositivo virtual se ha borrado:

emulator -list-avds

Solucionar fallos gráficos

Si el proceso del emulador se cierra inesperadamente en un RenderThread dentro de SwiftShader o SwANGLE, o si un arranque sin ventana se queda atascado antes de sys.boot_completed=1, primero actualiza el emulador de Android. En un host con GPU compatible, reintenta desactivando OpenGL y Vulkan por hardware:

emulator -avd eos_a16 \
  -gpu host -feature -Vulkan

Esta combinación evita el renderizador por software. El renderizado por hardware depende de la GPU y del driver del host; es una opción de diagnóstico, no un valor por defecto portable. Los modos de GPU swiftshader_indirect y guest de guías antiguas están obsoletos.

Advertencia: Estas imágenes de emulador no oficiales son compilaciones userdebug firmadas con claves de prueba. No uses cuentas reales ni datos personales sensibles en el dispositivo virtual.