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, comoaosp_cf_x86_64_phone
oaosp_husky
. Tuproduct_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
ohusky
, 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 llamadatrunk_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.