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 de envsetup.sh:

    source build/envsetup.sh
    

O

    . build/envsetup.sh
    

Consulta la secuencia de comandos en platform/build/envsetup.sh a fin de ver descripciones de comandos relacionados, como lunch para seleccionar orientaciones por dispositivo y tapas para compilar apps sin agrupar, como la app de TV de referencia.

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

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

  • lunch: lunch product_name-build_variant Selecciona product_name como producto para compilar y build_variant como variante para compilar. Además, almacena esas secciones en el entorno que leerán las invocaciones posteriores de m y otros comandos similares.
  • m: Ejecuta compilaciones desde la parte superior del árbol. Esto resulta útil ya que te permite ejecutar make desde adentro de los subdirectorios. Utiliza la variable del entorno de TOP si la tienes establecida. 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 compilar destinos específicos indicando sus nombres.
  • 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: cd en la parte superior del árbol.

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

    hmm
    

Cómo elegir un destino

Usa lunch para elegir el destino que deseas compilar. 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 destino del menú. Consulta Cómo seleccionar una compilación de dispositivo para las configuraciones de compilación de todos los dispositivos existentes.

Todos los destinos de compilación toman el formato BUILD-BUILDTYPE, en el que BUILD es un nombre de código que hace referencia a la combinación de funciones específica. El BUILDTYPE es uno de los siguientes.

Tipo de compilación 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 compilaciones adicionales que, normalmente, infringen el modelo de seguridad de la plataforma. Por lo tanto, la compilación "userdebug" es buena para los usuarios que prueban con capacidades de diagnóstico mayores. Si desarrollas con esta compilación, sigue las pautas 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 utilizadas para proporcionar una experiencia del usuario efectiva. De lo contrario, su comportamiento es similar a las compilaciones "user" y "userdebug". De este modo, los desarrolladores de dispositivos pueden ver cómo se comporta el código en esos entornos.

Si deseas obtener más información sobre cómo compilar y ejecutar para hardware real, consulta Cómo ejecutar compilaciones.

Cómo compilar el código

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

Compila todo lo que necesites con m. m puede manejar tareas paralelas con un argumento -jN. Si no proporcionas un argumento -j, la compilación del sistema 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 sus 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. Este destino se encuentra aquí porque el destino 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.
  • clean: m clean borra todos los archivos intermediarios y de salida de esta configuración. Es lo mismo que rm -rf out/.

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

¡Ejecútalo!

Puedes ejecutar tu compilación en un emulador o instalarla en un dispositivo. Como ya seleccionaste tu 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 instalar con el inicio rápido

Para instalar un dispositivo, usa fastboot, que debería estar incluido en tu ruta después de una compilación realizada correctamente. Consulta Cómo instalar 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 solucionar errores comunes de compilación

Versión de Java incorrecta

Si intentas compilar una versión de Android que no es consistente con tu versión de Java, make cancelará 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:

Python versión 3

El repositorio se compiló en una funcionalidad específica de Python 2.x y no es compatible con Python 3. Para usar el repositorio, instala Python 2.x:

    apt-get install python
    

Sistema de archivos sin distinción entre mayúsculas y minúsculas

Si estás compilando en un sistema de archivos HFS en macOS, es posible que encuentres un error como el siguiente:

    ************************************************************
    You are building on a case-insensitive filesystem.
    Please move your source tree to a case-sensitive filesystem.
    ************************************************************
    

Sigue las instrucciones en Cómo crear una imagen de disco que distinga entre mayúsculas y minúsculas.

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 en Cómo configurar el acceso de USB.

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