¿Cómo compilar la ROM de /e/OS?
Editar
Categorías de compilación
Elige la categoría que coincida con los cambios que pretendes hacer y cómo piensas distribuir el resultado.
| Categoría | Cambios permitidos | Distribución y actualizaciones |
|---|---|---|
| custom | Pueden cambiarse la identidad del producto, funcionalidades, aplicaciones o servicios. | Publícala bajo un nombre distinto y opera una infraestructura de actualizaciones independiente. |
| unofficial | Los cambios deben limitarse a habilitar o mejorar el soporte del dispositivo de destino. Las funciones principales y el conjunto de aplicaciones predeterminado permanecen sin cambios. | Identifica claramente la compilación como no oficial. No se proporcionan compilaciones nightly ni actualizaciones OTA. |
| community | El soporte del dispositivo se mantiene a un nivel de calidad adecuado para las versiones comunitarias, aplicando las actualizaciones de seguridad disponibles. | Las compilaciones pueden publicarse a través del canal de versiones comunitarias y recibir actualizaciones OTA. |
| official | El dispositivo debe cumplir los requisitos de calidad del proyecto y tener un mantenedor oficial. | Las compilaciones se publican a través del canal de versiones oficial y reciben actualizaciones OTA. |
Las fuentes de las compilaciones community y official deben alojarse en la instancia de GitLab del proyecto u otra fuente pública de confianza, como LineageOS o AOSP. Ver Build Status para los canales de versiones y niveles de soporte.
Cómo compilar la ROM
Instalar Docker
Si aún no lo has hecho, instala Docker.
Obtener la imagen de Docker
docker pull registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
Encontrar el código de tu dispositivo
El código del dispositivo puede encontrarse en la lista de dispositivos /e/OS o ejecutando el siguiente comando desde ADB:
adb shell getprop ro.product.device
Elegir un directorio de trabajo
Elige un sistema de archivos sensible a mayúsculas con al menos 400 GB de espacio libre. Fija
WORK_DIR en una ubicación de ese sistema de archivos; todos los archivos fuente, artefactos de compilación,
registros y datos de caché del compilador se almacenarán debajo de él.
export WORK_DIR=/path/to/eos-build
mkdir -p \
"${WORK_DIR}/src" \
"${WORK_DIR}/zips" \
"${WORK_DIR}/logs" \
"${WORK_DIR}/ccache"
Opcional: extraer blobs propietarios
Salta esta sección para la compilación community habitual con Docker. El constructor usa los manifiestos públicos y, por defecto, incluye los archivos propietarios de vendor soportados de los manifiestos públicos de TheMuppets.
Usa este paso opcional solo cuando los manifiestos públicos no proporcionen los archivos de vendor que necesita tu dispositivo de destino, o cuando el árbol de dispositivo que vas a compilar espere blobs extraídos localmente.
Para extraer blobs de un dispositivo conectado:
- Conecta el dispositivo a tu ordenador por USB.
- Activa ADB y root.
- Ve a
${WORK_DIR}/src/<rama>/device/<nombre-del-vendor>/<mi-dispositivo>. - Ejecuta el script de extracción del árbol de dispositivo:
./extract-files.sh
Los blobs suelen copiarse a
${WORK_DIR}/src/<rama>/vendor/<nombre-del-vendor>/<mi-dispositivo>. Una vez en su sitio, ejecuta la compilación Docker.
Iniciar la compilación
Ejecuta el siguiente comando. No olvides reemplazar <mi-dispositivo> por el código de tu
dispositivo y <rama> por una rama de desarrollo pública existente.
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=<rama>" \
-e "DEVICE_LIST=<mi-dispositivo>" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
Elige una rama del repositorio público
e/os/android.
Variables de entorno
Pasa los ajustes de compilación a docker run con -e "NOMBRE=valor". Solo
BRANCH_NAME y DEVICE_LIST deben fijarse para una compilación estándar de dispositivo.
| Variable | Predeterminado | Propósito |
|---|---|---|
| BRANCH_NAME | a16 | Rama de desarrollo pública a compilar. Usa una rama versionada como v4.2-a16 para una compilación reproducible. |
| DEVICE_LIST | vacío | Nombre en código del dispositivo, o nombres en código separados por comas. |
| REPO | https://gitlab.e.foundation/e/os/android.git | Repositorio de manifiesto usado para descargar las fuentes. |
| CCACHE_SIZE | 100G | Tamaño máximo de la caché del compilador. |
| REPO_JOBS | 10 | Trabajos paralelos de sincronización de fuentes; reduce este valor en almacenamiento lento. |
| BUILD_JOBS | CPUs lógicas + 2 | Trabajos paralelos de compilación de Android; fija un valor menor para limitar el uso de CPU o memoria. |
| INCLUDE_PROPRIETARY | true | Incluir los archivos propietarios de vendor soportados de los manifiestos públicos de TheMuppets. |
| LFS_STRICT | false | Fallar cuando algún objeto de Git LFS no pueda descargarse, en lugar de registrar un aviso. |
| IS_EMULATOR | false | Compilar una imagen de sistema de emulador en lugar de un paquete OTA de dispositivo. |
| BACKUP_IMG | false | Generar un paquete fastboot de fábrica cuando el dispositivo proporciona una configuración de flasheo de fábrica. |
| MINIMAL_APPS | false | Excluir de la compilación aplicaciones opcionales seleccionadas. |
| ENG_BUILD | false | Producir una compilación engineering con valores predeterminados orientados al desarrollo. |
| OTA_URL | vacío | Fija la URL del servidor de actualizaciones incrustada en la compilación. |
El conjunto completo de opciones y sus valores predeterminados actuales está definido en
Dockerfile.community.
Ejemplo para Fairphone 3/3+ usando la rama pública /e/OS v4.2 Android 15:
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=v4.2-a15" \
-e "DEVICE_LIST=FP3" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
-e "INCLUDE_PROPRIETARY=false" \
-e "BACKUP_IMG=true" \
-e "REPO_JOBS=2" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
REPO_JOBS=2 es adecuado para un array de discos duros. El valor predeterminado es 10; usa el
predeterminado o un valor mayor en almacenamiento SSD rápido si la conexión de red puede seguir el ritmo.
Para una imagen de emulador Android 16 x86_64, usa el producto de emulador y activa el empaquetado de emulador:
docker run --rm \
-v "${WORK_DIR}/src:/srv/src" \
-v "${WORK_DIR}/zips:/srv/zips" \
-v "${WORK_DIR}/logs:/srv/logs" \
-v "${WORK_DIR}/ccache:/srv/ccache" \
-e "BRANCH_NAME=v4.2-a16" \
-e "DEVICE_LIST=sdk_phone_x86_64" \
-e "REPO=https://gitlab.e.foundation/e/os/android.git" \
-e "INCLUDE_PROPRIETARY=false" \
-e "IS_EMULATOR=true" \
registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community
El IMG-e-…-sdk_phone_x86_64.zip resultante es un archivo de imagen de sistema del SDK de Android,
no un paquete de flasheo de fábrica para un dispositivo físico.
Android 16 contiene actualmente un puntero público de Git LFS roto en un archivo de datos de prueba
de Rust. El constructor community lo registra como aviso y
continúa, porque el archivo no es necesario para la imagen de sistema. Fija
LFS_STRICT=true si cada objeto LFS debe estar disponible en tu entorno.
Medidas de referencia de la compilación FP3
Estas medidas son un ejemplo, no un mínimo ni una garantía de rendimiento. Se registraron para una compilación Android 15 de FP3 en un Intel Core i9-9900K (8 núcleos, 16 hilos), 62,7 GiB de RAM y un array RAID 1 de dos discos duros SATA:
| Operación | Tiempo medido |
|---|---|
| Descarga inicial de fuentes con Git LFS | Unas 3 h 7 min (unas 2 h 32 min para repo sync, luego 35 min para Git LFS) |
repo sync reanudado con REPO_JOBS=2 | 25 min 59 s |
Compilación de Android (target-files-package y otatools) | 6 h 19 min 38 s |
| Ejecución completa del contenedor, incluido el empaquetado | 6 h 35 min 54 s |
| Recompilación incremental y empaquetado corregido | 37 min 21 s |
La compilación usó hasta unos 15 núcleos lógicos de CPU y 29,4 GiB de RAM. La descarga inicial transfirió unos 43,9 GB y escribió unos 336 GB en el almacenamiento. Las medidas de la descarga incluyen reintentos y por tanto no son un benchmark controlado de caché fría.
Medidas de referencia de la compilación del emulador Android 16
El mismo host basado en HDD produjo una imagen Android 16 sdk_phone_x86_64 con
BUILD_JOBS=18, sin caché de compilador y con los siguientes tiempos:
| Operación | Tiempo medido |
|---|---|
| Descarga inicial hasta la comprobación de Git LFS | 4 h 3 min 25 s |
| Recuperación manual de un objeto LFS público roto, no crítico para la compilación | Unos 22 min |
| Compilación de Android | 6 h 15 min 34 s |
Empaquetado emu_img_zip | 9 min 56 s |
| Ejecución completa del contenedor de compilación | 7 h 10 min 23 s |
El archivo resultante pesó 1,60 GB. Se verificaron su suma de comprobación y su integridad ZIP,
y contenía los metadatos del SDK x86_64 de la API 36, kernel-ranchu,
ramdisk.img, system.img y vendor.img. Estas medidas incluyen una
compilación sin caché en almacenamiento lento y no son garantías de rendimiento.
Opciones de compilación
Ya puedes personalizar las aplicaciones instaladas por defecto en /e/OS.
- si quieres añadir aplicaciones extra a las predeterminadas: añade tu APK al directorio android_prebuilts_prebuiltapks/, y fija la variable de entorno
CUSTOM_APPSen consecuencia en la imagen de Docker, antes de compilar. - si quieres mantener una compilación de /e/OS mínima, fija la variable de entorno
MINIMAL_APPSa true (por defecto es false). Por ahora elimina el visor de LibreOffice, PDFViewer, Maps y Weather.
Obtener tu imagen
Cuando tu compilación termine, encontrarás los paquetes y sus archivos .sha256sum en
${WORK_DIR}/zips/<mi-dispositivo>:
- Con
BACKUP_IMG=true,IMG-e-…-<mi-dispositivo>.zipes el paquete fastboot de fábrica para instalar en un dispositivo desde cero. Incluye las imágenes de las particiones, el script de flasheo y los binarios fastboot cuando el dispositivo proporciona una configuración de flasheo de fábrica. e-…-<mi-dispositivo>.zipes el paquete OTA para una actualización o una instalación basada en recovery.- Con
IS_EMULATOR=true,IMG-e-…-sdk_phone_x86_64.zipes un archivo de imagen de sistema del SDK de Android para crear un dispositivo virtual de emulador.
Verifica la suma de comprobación antes de flashear un paquete de dispositivo o instalar una imagen de sistema de emulador. Para los pasos de instalación específicos de cada dispositivo, consulta la lista de dispositivos /e/OS.
¿Necesitas más ayuda?
Si necesitas ayuda, consulta con otros constructores de ROM activos en nuestro foro que compilan ROM no oficiales de /e/OS. Una búsqueda en internet de guías sobre compilación de ROM de Android también mostrará sitios que pueden ser útiles.
Para más información sobre nuestra imagen de docker y sus variables de entorno, haz clic aquí.
Para informar de un problema sobre una compilación, consulta esta guía