Siga estas instrucciones para comenzar a construir Android.
Configurando el ambiente
Inicialice el entorno con el script envsetup.sh
:
source build/envsetup.sh
o
. build/envsetup.sh
Consulte el script en platform/build/envsetup.sh para obtener descripciones de los comandos relacionados, incluido el almuerzo para seleccionar objetivos de dispositivos y tapas para crear aplicaciones desagregadas, como la aplicación de TV de referencia .
Debe volver a emitir este comando después de cada repo sync
para detectar cualquier cambio en ese script. Tenga en cuenta que reemplazar source
con .
(un solo punto) ahorra algunos caracteres y la forma corta se usa más comúnmente en la documentación.
El script envsetup.sh
importa varios comandos que le permiten trabajar con el código fuente de Android, incluidos los comandos utilizados en este ejercicio.
Para ver la lista completa de comandos disponibles, ejecute:
hmm
Elegir un objetivo
almuerzo
Elige qué objetivo construir con lunch
. lunch product_name - build_variant
selecciona product_name como el producto a construir y build_variant como la variante a construir, y almacena esas selecciones en el entorno para ser leídas por invocaciones posteriores de m
y otros comandos similares.
La configuración exacta se puede pasar como argumento. Por ejemplo, el siguiente comando hace referencia a una compilación completa del emulador, con toda la depuración habilitada:
lunch aosp_arm-eng
Si se ejecuta sin argumentos, lunch
le solicita que elija un objetivo del menú, pero tenga en cuenta que el menú no incluye todas las posibilidades. Consulte Seleccionar una compilación de dispositivo para conocer las configuraciones de compilación de todos los dispositivos compatibles con AOSP, o hable con personas de su equipo sobre el almuerzo correcto para el dispositivo en el que está trabajando.
Todos los objetivos de compilación toman la forma BUILD-BUILDTYPE
, donde BUILD
es un nombre en clave que hace referencia a la combinación de características particular. BUILDTYPE
es uno de los siguientes.
Tipo de construcción | Usar |
---|---|
usuario | Acceso limitado; adecuado para la producción |
depuración de usuario | Como usuario pero con acceso root y capacidad de depuración; muy cerca del rendimiento de producción |
eng | Configuración de desarrollo con tiempo de construcción más rápido; más adecuado para el desarrollo diario |
La compilación userdebug
debe comportarse igual que la compilación user
, con la capacidad de habilitar una depuración adicional que normalmente viola el modelo de seguridad de la plataforma. Esto hace que la compilación userdebug
sea buena para comprender el rendimiento y la potencia utilizados por la versión. Al desarrollar con la compilación userdebug
, siga las pautas de userdebug .
La construcción eng
prioriza la productividad de ingeniería para los ingenieros que trabajan en la plataforma. La compilación eng
desactiva varias optimizaciones utilizadas para maximizar el rendimiento del tiempo de ejecución. De lo contrario, la compilación eng
es muy similar a las compilaciones user
y userdebug
para que los desarrolladores de dispositivos puedan ver cómo se comporta el código en esos entornos.
Para ver la configuración actual del almuerzo, ejecute el comando:
echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
Para obtener más información sobre la compilación y la ejecución en hardware real, consulte Dispositivos intermitentes .
tapas
El comando tapas
configura la compilación de aplicaciones desagregadas. Selecciona aplicaciones individuales que el sistema de compilación de Android creará. A diferencia lunch
, tapas
no requieren la construcción de imágenes para un dispositivo.
Ejecute tapas help
para obtener más información sobre el comando.
Construyendo el código
Esta sección es un resumen rápido para garantizar que la configuración esté completa.
Construye todo con m
. m
puede manejar tareas paralelas con un argumento -jN
. Si no proporciona un argumento -j
, el sistema de compilación selecciona automáticamente un recuento de tareas paralelas que considera óptimo para su sistema.
m
Como se explicó anteriormente, puede crear módulos específicos en lugar de la imagen completa del dispositivo enumerando sus nombres en su línea de comando m
. Además, m
proporciona algunos pseudoobjetivos para fines especiales. Algunos ejemplos son:
-
droid
-m droid
es la construcción normal. Este objetivo está aquí porque el objetivo predeterminado requiere un nombre. -
all
-m all
construye todo lo que hacem droid
, además de todo lo que no tiene la etiquetadroid
. El servidor de compilación ejecuta esto para asegurarse de que todo lo que está en el árbol y tiene un archivoAndroid.mk
se compila. -
m
: ejecuta construcciones desde la parte superior del árbol. Esto es útil porque puede ejecutarmake
desde dentro de subdirectorios. Si tiene configurada la variable de entornoTOP
, la usa. Si no lo hace, busca el árbol desde el directorio actual, intentando encontrar la parte superior del árbol. Puede crear todo el árbol de código fuente ejecutandom
sin argumentos o crear objetivos específicos especificando sus nombres. -
mma
: crea todos los módulos en el directorio actual y sus dependencias. -
mmma
: compila todos los módulos en los directorios proporcionados y sus dependencias. -
croot
-cd
hasta la cima del árbol. -
clean
-m clean
elimina todos los archivos intermedios y de salida para esta configuración. Esto es lo mismo querm -rf out/
.
Ejecute m help
para ver qué otros pseudoobjetivos proporciona m
.
Ejecutando la compilación
Puede ejecutar su compilación en un emulador o actualizarla en un dispositivo. Debido a que ya seleccionó su objetivo de compilación con lunch
, es poco probable que se ejecute en un objetivo diferente al que fue creado.
Flasheando con fastboot
Para actualizar un dispositivo, use fastboot
, que debe incluirse en su ruta después de una compilación exitosa. Consulte Cómo actualizar un dispositivo para obtener instrucciones.
Emulando un dispositivo Android
El emulador se agrega automáticamente a su ruta mediante el proceso de compilación. Para ejecutar el emulador, escriba:
emulator
Comprender las huellas dactilares de construcción
Para rastrear e informar problemas relacionados con una compilación de Android en particular, es importante comprender la huella digital de la compilación. La huella digital de compilación es una cadena única y legible por humanos que contiene información del fabricante emitida para cada compilación. Consulte la descripción de HUELLA DIGITAL en la sección Parámetros de compilación del Documento de definición de compatibilidad de Android (CDD) para conocer la sintaxis precisa.
La huella digital de compilación representa una implementación y revisión particular de Android. Esta clave única permite a los desarrolladores de aplicaciones y a otras personas informar problemas con versiones de firmware específicas. Consulte Informar errores para el proceso de informe de problemas de Android.
Una huella digital de compilación encapsula todos los detalles de implementación de Android:
- API: Android y nativas, así como comportamientos de API suaves
- API principal y algunos comportamientos de la interfaz de usuario del sistema
- Requisitos de compatibilidad y seguridad definidos en el CDD
- Especificaciones del producto y configuración de funciones y usos empleadas por las aplicaciones para apuntar a dispositivos que cumplen con los requisitos esperados.
- Implementaciones de componentes de hardware y software.
Consulte el CDD para obtener detalles completos y Agregar un nuevo dispositivo para obtener instrucciones sobre cómo crear un dispositivo Android completamente nuevo.
Solución de problemas de errores de compilación comunes
Versión de Java incorrecta
Si está intentando crear una versión de Android que no es coherente con su versión de Java, make
con un mensaje como el siguiente:
************************************************************ 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 soluciones:
- No instalar el JDK correcto según lo especificado en los requisitos de JDK . Asegúrese de haber seguido los pasos en Configuración del entorno y Elección de un objetivo .
- Otro JDK previamente instalado aparece en su camino. Anteponga el JDK correcto al comienzo de su ruta o elimine el JDK problemático.
Sin permiso USB
De forma predeterminada, en la mayoría de los sistemas Linux, los usuarios sin privilegios no pueden acceder a los puertos USB. Si ve un error de permiso denegado, siga las instrucciones en Configuración del acceso USB .
Si ADB ya se estaba ejecutando y no puede conectarse al dispositivo después de configurar esas reglas, puede eliminarlo con adb kill-server
. Ese comando hace que ADB se reinicie con la nueva configuración.