Cómo compilar Android

Sigue las instrucciones de esta página para compilar Android.

Cómo configurar tu entorno de compilación

Desde tu directorio de trabajo, obtén la secuencia de comandos envsetup.sh para configurar el entorno de compilación.

source build/envsetup.sh

Esta secuencia de comandos importa varios comandos que te permiten trabajar con el código fuente de Android, incluidos los comandos que se usan en esta página. Para ver la fuente de la secuencia de comandos, consulta platform/build/envsetup.sh. Para ver la ayuda integrada, escribe hmm.

Cómo elegir un destino

Antes de compilar Android, debes identificar un destino para compilar. El destino refleja la plataforma para la que estás compilando. Para identificarlo, usa el comando lunch seguido de una cadena que represente el destino. Por ejemplo:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

Deberías ver una sinopsis de tu destino y entorno de compilación:

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

La cadena que representa el destino tiene el siguiente formato:

lunch product_name-release_config-build_variant

Los componentes de esta cadena son los siguientes:

  • product_name es el nombre del producto que quieres compilar, como aosp_cf_x86_64_phone o aosp_husky. Tu product_name específico puede seguir tu propio formato para el dispositivo, pero el formato que usa Google para sus dispositivos tiene estos componentes:

    • aosp hace referencia a la plataforma de código abierto de Android.
    • (Opcional) cf se incluye cuando el destino está pensado para ejecutarse dentro del emulador de Cuttlefish.
    • Arquitectura y hardware (nombre interno), como x86_64_phone o husky, que es el nombre interno de Pixel 8 Pro. Para obtener una lista de los nombres internos de los dispositivos de Google, consulta Nombres internos de dispositivos.
  • release_config está establecido en una configuración de versión, como la configuración de versión de desarrollo llamada trunk_staging. Una configuración de versión identifica ciertas funciones y código detrás de las marcas de lanzamiento de funciones que están habilitadas o inhabilitadas para una compilación. Para obtener más información sobre las configuraciones de versión, consulta Cómo establecer valores de marcas de lanzamiento de funciones.

  • La porción de build_variant de la cadena puede ser uno de los tres valores de la siguiente tabla:

    build_variant Descripción
    user Esta variante de compilación proporciona acceso de seguridad limitado y es adecuada para producción.
    userdebug Esta variante de compilación ayuda a los desarrolladores de dispositivos a comprender el rendimiento y la potencia de las versiones en desarrollo. Si desarrollas con una compilación de userdebug, sigue los Lineamientos para userdebug.
    eng Esta variante de compilación tiene un tiempo de compilación menor y es más adecuada para el desarrollo diario si no te preocupa el rendimiento ni la potencia.

Si ejecutas lunch sin argumentos, se proporciona una lista de destinos comunes. También puedes crear tus propias cadenas de destino. Para ello, une los elementos de la cadena de destino con la información en esta página y los nombres internos que representan hardware de Google específico en Nombres internos de dispositivos.

Cómo ver el destino actual

Para ver la configuración actual del lanzamiento, ejecuta lo siguiente:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Cómo compilar el código

Para compilar tu destino, ejecuta el siguiente comando. En función de la especificación de tu estación de trabajo, la primera compilación podría tardar menos de una hora y hasta algunas horas. Las compilaciones posteriores toman mucho menos tiempo.

m

La salida de tu compilación aparece en $OUT_DIR. Si compilas diferentes destinos, cada compilación aparece en $OUT_DIR.

El comando m ejecuta compilaciones desde la parte superior del árbol, por lo que puedes ejecutar m desde subdirectorios. Si tienes configurada la variable de entorno TOP, el comando m la usa. Si TOP no está configurada, el comando m busca el árbol del directorio actual para encontrar la parte superior del árbol.

El comando m puede controlar tareas paralelas con un argumento -jN. Si no proporcionas un argumento -j, el sistema de compilación seleccionará automáticamente un recuento de tareas paralelas que considere óptimo para tu sistema.

Puedes compilar módulos específicos en lugar de la imagen del dispositivo completa indicando los nombres de los módulos en tu línea de comandos m. Además, el comando m proporciona algunos seudodestinos, denominados objetivos. Por ejemplo, m nothing no compila nada, sino que analiza y valida la estructura de compilación. Para ver una lista de objetivos válidos, escribe m help.

Solución de errores de compilación (8.0 o versiones anteriores)

En caso de que estés compilando AOSP 8 o una versión anterior, m podría anularse si encuentra un problema con tu versión de Java. Por ejemplo, podrías recibir un mensaje como este:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

Estas son las posibles causas y sus soluciones:

  • No instalaste el JDK correcto como se especifica en las secciones de JDK de Configuración para el desarrollo en AOSP (2.3 - 8.0).
  • Hay otro JDK instalado antes que aparece en tu ruta de acceso. Antepón el JDK correcto al principio de la ruta de acceso o quita el que genera problemas.