Codelab para desarrolladores de Android

Puedes ayudar a desarrollar el sistema operativo más instalado de la historia. Sí, estás aquí para emprender el camino que te convertirá en ingeniero de la plataforma de Android.

Aunque el recorrido es desafiante, el equipo de Android se esfuerza por simplificar el camino en cada lanzamiento. Todos los días, trabajamos directamente en el Proyecto de código abierto de Android (AOSP) para realizar mejoras.

Por eso relájate, enciende una terminal y hagamos historia.

Objetivos

Este codelab tiene dos objetivos:

  1. Darte una idea de cómo es el flujo de trabajo de desarrollo para los ingenieros de Android que trabajan en la plataforma (sistema operativo)
  2. Animarte a brindar comentarios sobre las herramientas , la documentación y el flujo de trabajo de desarrollo de Android cuando empiezas desde cero

Requisitos previos

A continuación, se muestra la lista completa de requisitos del codelab, que derivan de los requisitos para el desarrollo de plataformas en general (AOSP).

Para completar este codelab, debes configurar lo siguiente:

Entorno

Por lo general, los usuarios compilan y desarrollan en la estación de trabajo directamente. Como es posible que estés trabajando en diferentes terminales, y muchos de los comandos utilizados sean específicos de una terminal, deberás volver a ejecutarlos en cada sesión de terminal. Se incluyen específicamente los comandos source build/envsetup.sh y lunch.

Cómo configurar la estación de trabajo

  1. Instala los paquetes necesarios en la estación de trabajo.
  2. Desde la terminal, instala Repo y obtén las credenciales para todos los repositorios de Git.

Cómo inicializar y sincronizar el código

  1. Ve a tu directorio principal:

    cd ~
        
  2. En su interior, crea un subdirectorio de trabajo local:

    mkdir aosp
        
  3. Ve al directorio:

    cd aosp
        
  4. Inicializa la rama principal del código fuente del repositorio de AOSP (opción predeterminada):

    repo init -u https://android.googlesource.com/platform/manifest
        
  5. Ingresa o acepta tus credenciales de Git (nombre, dirección de correo electrónico).

  6. Sincroniza el código fuente:

    repo sync -j16
        

Las sincronizaciones iniciales pueden tardar una hora o más. Consulta las instrucciones de descarga para obtener información relacionada mientras esperas.

Cada proceso de repo se representa con un archivo de manifiesto. Es posible que tengas más de un proceso de Repo a la vez, siempre y cuando estos se encuentren en distintos directorios. Sin embargo, ten en cuenta que cada checkout y compilación equivale a aproximadamente 300 GB o más. Por lo tanto, limita la cantidad a dos o aumenta el sistema con una unidad secundaria.

Sugerencia: Para liberar espacio, borra un directorio secundario y vuelve a comenzar desde la creación del directorio:

rm -rf aosp2
    

Cómo compilar el código

Para compilar Android, selecciona un tipo de dispositivo de destino a fin de compilar con el comando lunch. Los destinos son permutaciones de dispositivo, como un factor de forma o modelo específico.

La orientación por dispositivo incluida a continuación, aosp_cf_x86_phone-userdebug, te permite compilar el dispositivo Android virtual Cuttlefish para realizar pruebas sin un dispositivo físico.

Si quieres crear y actualizar un dispositivo físico, elige otro objetivo y sigue las instrucciones para escribir en la memoria flash de dispositivos.

  1. Configura el entorno a fin de compilar dispositivos Android. Para ello, ejecuta el siguiente comando desde la raíz del checkout del código fuente:

    source build/envsetup.sh
        
  2. Pasa el objetivo de compilación al comando de lanzamiento de la siguiente manera:

    lunch aosp_cf_x86_phone-userdebug
        
  3. Compila el código desde cualquier parte del resultado con lo siguiente:

    m
        

Es posible que la primera compilación tarde varias horas. Las compilaciones posteriores toman mucho menos tiempo.

Cómo crear una instancia de Acloud

Acloud es una herramienta de línea de comandos en AOSP que ayuda a los usuarios a crear dispositivos Android virtuales, en este caso, Cuttlefish.

Si estás en la misma sesión de terminal que usaste para compilar el código, continúa. De lo contrario, vuelve a ejecutar la secuencia de comandos de envsetup.sh y el mismo comando de lanzamiento que ya usaste. Luego, haz lo siguiente:

  1. Crea una instancia local de Acloud con:

    acloud create --local-image --local-instance
        
  2. Acepta actualizaciones de paquetes obligatorios.

  3. Si se te solicita, reinicia tu estación de trabajo para que se apliquen todos los cambios.

  4. Selecciona el dispositivo Cuttlefish.

Deberías ver una sesión de VNC que contenga un dispositivo Android.

Puedes usar el mouse y el teclado para interactuar con el dispositivo virtual en tu estación de trabajo. También puedes seguir la actividad dentro de los registros mientras usas el dispositivo con el comando Android Debug Bridge (adb) logcat:

adb logcat
    

Hacer un cambio

Actualiza el código fuente según esta lista de cambios de ejemplo.

  1. Desde la raíz del checkout (directorio aosp/), ve al proyecto de Git de frameworks/native:

    cd frameworks/native
        
  2. Inicia un proyecto temporal con:

    repo start <some-name> .
        
  3. Edita SurfaceFlinger.cpp a fin de incluir las actualizaciones de la lista de cambios que se encuentra en la siguiente ubicación:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
        
  4. Compila el código:

    m
        
  5. Actualiza la compilación en el dispositivo:

    adb root
        adb remount
        adb sync
        adb reboot
        acloud reconnect
        

Deberías ver un cambio de color en el dispositivo.

Cómo probar el código

Durante esta parte del codelab, ejecutaremos una prueba de ejemplo que se encuentra en el árbol de fuente y que ya presenta errores. A fin de ejecutar la prueba a nivel local, usaremos Atest para probar el código.

Para usar la prueba, haz lo siguiente:

  1. Ejecuta:

    atest DevCodelabTest
        
  2. Como la prueba fallará, vamos a corregirla. Busca el código fuente de la prueba que falló:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
        
  3. Luego, busca dentro del siguiente directorio:

    platform_testing/tests/example/devcodelab
        
  4. En el archivo que editarás, toma el nombre de la prueba y reemplaza . por /, de la siguiente manera:

    android.test.example.devcodelab.DevCodelabTest
        

    Se convierte en lo siguiente:

    src/android/test/example/devcodelab/DevCodelabTest.java
        
  5. Edita lo siguiente:

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
        

    Para reemplazar:

    Assert.assertTrue(false)
        

    Con:

    Assert.assertTrue(true)
        
  6. Vuelve a ejecutar la prueba para verificar que se haya corregido:

    atest DevCodelabTest
        

Cómo subir el código para revisión

El repositorio simplifica el uso de Git. Para ello, agrupa comandos como git clone a fin de aplicarlos en varios repositorios (o proyectos) de Git al mismo tiempo.

Consulta las herramientas de control de código fuente para obtener descripciones generales de Git y Repo con vínculos a la documentación completa sobre cómo trabajar con el código fuente de Android. Consulta en el repositorio de AOSP la lista completa de proyectos de Git y los proyectos (rutas de acceso) individuales para ramas asociadas con cada proyecto.

Usarás el sistema de revisión de código basado en la Web de Gerrit para proyectos en Git.

  1. Si hiciste cambios en el proyecto de frameworks/native, ejecuta estos comandos para subirlos:

    cd frameworks/native
        repo start codelab .
        git add .
        git commit
        
  2. Para el mensaje de confirmación, ingresa lo siguiente:

    Android codelab change
        Test: manual atest
        
  3. Sube el cambio:

    repo upload
        

Si lo haces correctamente, verás un mensaje similar al siguiente:

Upload project frameworks/native/ to remote branch master:
      branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
             ff46b36d android codelab change
    to https://android-review.googlesource.com/ (y/N)? y
    remote: Processing changes: refs: 1, new: 1, done
    remote:
    remote: SUCCESS
    remote:
    remote:   https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
    remote:
    To https://android-review.googlesource.com/platform/frameworks/native
     * [new branch]          codelab -> refs/for/master
    

Cómo ver el cambio en Gerrit

Ve al vínculo impreso en la terminal, similar al siguiente:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
    

De esta manera finaliza el codelab para principiantes sobre desarrollo para la plataforma de Android. Consulta Cómo enviar parches para conocer los próximos pasos y explora el resto de este sitio a fin de obtener toda la información sobre cómo desarrollar para Android.

Cómo revertir el cambio

Normalmente, después de la prueba y la revisión o aprobación, debes enviar el cambio en Gerrit y fusionarlo en el repositorio.

En su lugar, a efectos del codelab, revierte la lista de cambios. Para ello, haz clic en Abandonar en Gerrit.

A continuación, abandona la rama temporal asociada en el directorio del proyecto nativo o de marco de trabajo (o sus subramas):

repo abandon codelab .
    

Además, recuerda revertir los cambios en el archivo de prueba. Debido a que no aplicamos las acciones de repo start, git commit y repo upload para el cambio, podemos restablecer el archivo de la siguiente manera (suponiendo que te encuentres en el aosp/platform_testing directory):

git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    git checkout .
    

Terminaste por ahora. ¡Bien hecho!

Cómo obtener ayuda

Si encuentras errores durante este codelab, infórmalos en el vínculo Comentarios acerca del sitio que se encuentra en la parte inferior de cualquier página. Envía preguntas al grupo android-building.