Cómo compilar Android

Sigue estas instrucciones para comenzar a compilar Android.

Cómo configurar el entorno

Inicializa el entorno con la secuencia de comandos envsetup.sh:

source build/envsetup.sh

o

. build/envsetup.sh

En platform/build/envsetup.sh, podrás consultar descripciones de comandos relacionados, incluidos lunch para elegir orientaciones de dispositivos y tapas para compilar apps sin empaquetar, como la app para TV de referencia.

Debes volver a emitir este comando después de cada repo sync para registrar los cambios en esa secuencia. Ten en cuenta que reemplazar source por . (un solo punto) permite ahorrar algunos caracteres, y la forma corta se usa con mayor frecuencia en la documentación.

La secuencia de comandos envsetup.sh importa varios comandos que te permiten trabajar con el código fuente de Android, incluidos los que se usan en este ejercicio.

Para ver la lista completa de comandos disponibles, ejecuta lo siguiente:

hmm

Cómo elegir una orientación

lunch

Usa lunch para elegir el destino que deseas compilar. lunch product_name-build_variant selecciona product_name como el producto para compilar y build_variant como la variante para compilar, y almacena esas selecciones en el entorno para que sean leídas por invocaciones de m y otros comandos similares.

Puedes pasar la configuración exacta como un argumento. Por ejemplo, el siguiente comando hace referencia a una compilación completa para el emulador, con toda la depuración habilitada:

lunch aosp_arm-eng

Si se ejecuta sin argumentos, lunch te pide que elijas un objetivo del menú. Pero ten en cuenta que el menú no incluye todas las posibilidades. Consulta Cómo seleccionar una compilación de dispositivo para conocer las configuraciones de compilación de todos los dispositivos compatibles con AOSP o consulta a personas de tu equipo sobre el almuerzo correcto para el dispositivo en el que estás trabajando.

Todos los objetivos de compilación toman el formato BUILD-BUILDTYPE, en el que BUILD es un nombre interno que hace referencia a la combinación de funciones específica. BUILDTYPE es una de las siguientes opciones:

Buildtype Uso
user Acceso limitado; adecuado para producción
userdebug Como user, pero con acceso de raíz y capacidad de depuración; opción preferida para la depuración
eng Configuración de desarrollo con herramientas de depuración adicionales

La compilación userdebug debería tener el mismo comportamiento que la compilación user, además de la capacidad de habilitar depuraciones adicionales que, normalmente, infringen el modelo de seguridad de la plataforma. Por ese motivo, la compilación userdebug es una buena opción para los usuarios que prueban con capacidades de diagnóstico mayores. Si desarrollas con la compilación userdebug, sigue los lineamientos de userdebug.

La compilación eng prioriza la productividad de ingeniería para los ingenieros que trabajan en la plataforma. La compilación eng desactiva varias optimizaciones usadas para proporcionar una buena experiencia del usuario. De lo contrario, el comportamiento de la compilación de eng es similar al de las compilaciones user y userdebug, de modo que los desarrolladores de dispositivos pueden ver cómo se comporta el código en esos entornos.

Para ver la configuración actual de la ejecución, ejecuta el comando:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Para más información sobre cómo compilar y ejecutar apps en hardware real, consulta Cómo escribir en la memoria flash de dispositivos.

tapas

El comando tapas configura la compilación de apps sin empaquetar. Selecciona apps individuales para que las compile el sistema de compilación de Android. A diferencia de lunch, tapas no solicita la compilación de imágenes para un dispositivo.

Ejecuta tapas help para obtener más información sobre el comando.

Cómo compilar el código

Esta sección es un resumen rápido que garantiza que se complete la configuración.

Compila todo con m. 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.

m

Como se explicó anteriormente, puedes compilar módulos específicos en lugar de la imagen del dispositivo completa si indicas los nombres en la línea de comandos de m. Además, m proporciona algunos pseudoobjetivos para fines especiales. Por ejemplo:

  • droid: m droid es la compilación normal. El objetivo está aquí porque el objetivo predeterminado requiere un nombre.
  • all: m all compila todo lo que hace m droid, además de todo lo que no tiene la etiqueta droid. El servidor de compilación lo ejecuta para asegurarse de que se compile todo lo que esté en el árbol y tenga un archivo Android.mk.
  • m: ejecuta compilaciones desde la parte superior del árbol. Es útil, ya que te permite ejecutar make desde adentro de los subdirectorios. Usa la variable de entorno de TOP si la tienes configurada. Si no la tienes, busca el árbol del directorio actual para encontrar la parte superior del árbol. Puedes compilar todo el árbol del código fuente si ejecutas m sin los argumentos, o bien indicar los nombres para compilar destinos específicos.
  • mma: compila 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: corresponde a cd en la parte superior del árbol.
  • clean: m clean borra todos los archivos intermedios y de salida de esta configuración. Es lo mismo que rm -rf out/.

Ejecuta m help para ver qué otros pseudoobjetivos proporciona m.

Cómo ejecutar la compilación

Puedes ejecutar tu compilación en un emulador o instalarla en un dispositivo. Como ya seleccionaste el objetivo de compilación con lunch, es poco probable que se ejecute en un objetivo que no sea para el que se lo compiló.

Cómo escribir en la memoria flash con fastboot

Para escribir en la memoria flash de un dispositivo, usa fastboot, que debería estar incluido en tu ruta después de una compilación exitosa. Consulta Cómo escribir en la memoria flash de un dispositivo para obtener las instrucciones.

Cómo emular un dispositivo Android

El proceso de compilación agrega automáticamente el emulador a tu ruta. Para ejecutar el emulador, escribe lo siguiente:

emulator

Cómo interpretar las huellas digitales de compilación

Para realizar un seguimiento y denunciar problemas relacionados con una compilación de Android en particular, es importante interpretar la huella digital de compilación. que es una string única y legible que contiene la información del fabricante que se emitió para cada compilación. Consulta la descripción de HUELLA DIGITAL dentro de la sección Parámetros de compilación del Documento de definición de compatibilidad de Android (CDD) para obtener la sintaxis precisa.

La huella digital de compilación representa una implementación y revisión de Android en particular. Esta clave única permite que los desarrolladores de apps y otros usuarios reporten problemas relacionados con versiones de firmware específicas. Consulta Cómo informar errores para ver el proceso correspondiente a Android.

Una huella digital de compilación encapsula todos los detalles de la implementación de Android:

  • API: nativas y de Android, así como los comportamientos de las API de software
  • API central y algunos comportamientos de la IU del sistema
  • Requisitos de compatibilidad y seguridad definidos en el CDD
  • Especificaciones de productos y configuración de uses-feature que emplean las apps en dispositivos de destino para satisfacer los requisitos esperados
  • Implementaciones de componentes de hardware y software

Consulta el CDD para conocer los datos completos y agregar un dispositivo nuevo a fin de obtener instrucciones para crear un dispositivo Android completamente nuevo.

Cómo solucionar errores comunes de compilación

Versión de Java incorrecta

Si intentas compilar una versión de Android que no es coherente con tu versión de Java, make anulará la operación 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 sus soluciones:

Sin permiso de USB

De forma predeterminada, en la mayoría de los sistemas Linux, los usuarios sin privilegios no pueden acceder a los puertos USB. Si ves un error de denegación de permisos, sigue las instrucciones que se indican en Cómo configurar el acceso de USB.

Si ya se estaba ejecutando ADB y no puedes conectarte al dispositivo después de configurar esas reglas, puedes finalizar el proceso con adb kill-server. Ese comando hace que se reinicie ADB con la configuración nueva.