Codelab para Desenvolvedor Android

Você pode ajudar a desenvolver o sistema operacional mais instalado na história. Sim, você está aqui para embarcar em uma aventura para se tornar engenheiro da Plataforma Android.

Embora o caminho seja desafiador, a equipe do Android buscará simplificar sua jornada a cada versão. E melhoramos todos os dias com o trabalho direto no Android Open Source Project (AOSP).

Então, sente-se, acione um terminal e vamos fazer história.

Objetivos

Este codelab tem dois objetivos:

  1. Ele mostrará um pouco do que é o fluxo de trabalho do desenvolvedor para os engenheiros Android que trabalham na plataforma (sistema operacional).
  2. Ele também faz com que você forneça feedback (link em inglês) sobre as ferramentas, a documentação e o fluxo de trabalho do desenvolvedor Android ao começar do zero.

Pré-requisitos

Esta é a lista completa de requisitos para esse codelab. Eles derivam dos requisitos para o desenvolvimento da plataforma geral (AOSP).

Para realizar este codelab, você precisa configurar:

Ambiente

Normalmente, os usuários criam e desenvolvem diretamente na estação de trabalho. Como é possível usar vários terminais, e muitos dos comandos usados são específicos do terminal, será necessário executá-los novamente em cada sessão. Especificamente, isso inclui os comandos source build/envsetup.sh e lunch.

Configurar a estação de trabalho

  1. Instale os pacotes necessários na estação de trabalho.
  2. Enquanto ainda estiver em um terminal, instale o Repo e receba as credenciais para todos os repositórios Git.

Inicializar e sincronizar o código

  1. Navegue até o diretório principal:

    cd ~
        
  2. Crie um subdiretório de trabalho local dentro dele:

    mkdir aosp
        
  3. Navegue até o diretório:

    cd aosp
        
  4. Inicialize a ramificação principal do código-fonte do repositório AOSP (o padrão):

    repo init -u https://android.googlesource.com/platform/manifest
        
  5. Insira ou aceite suas credenciais do Git (nome, endereço de e-mail).

  6. Sincronize o código-fonte:

    repo sync -j16
        

As sincronizações iniciais podem levar uma hora ou mais. Consulte as instruções de download para ver os detalhes relacionados enquanto aguarda.

Cada checkout de repo é representado por um arquivo de manifesto (link em inglês). Você pode ter mais de um checkout de repo por vez, contanto que eles existam em diretórios distintos. No entanto, cada checkout e build tem aproximadamente 300 GB e pode aumentar. Portanto, limite-se a dois ou aumente o sistema com um drive secundário.

Dica: para liberar espaço, exclua um diretório de ramificação e comece novamente pela criação do diretório:

rm -rf aosp2
    

Criar o código

Para criar o código do Android, você precisa selecionar um tipo de dispositivo de destino para o build com o comando lunch. Os destinos são permutações de dispositivo, como um modelo ou formato específico.

O destino do dispositivo incluído abaixo, aosp_cf_x86_phone-userdebug, permite que você crie o dispositivo virtual Android Cuttlefish para testes sem um dispositivo físico.

Para criar e atualizar um dispositivo físico, escolha outro destino e siga as instruções para atualização flash em dispositivos.

  1. Para configurar o ambiente para a criação de dispositivos Android, execute o seguinte comando na raiz do checkout do código-fonte:

    source build/envsetup.sh
        
  2. Transmita o destino do build para o comando lunch, desta maneira:

    lunch aosp_cf_x86_phone-userdebug
        
  3. Crie o código a partir de qualquer lugar do checkout com:

    m
        

A conclusão do primeiro build leva horas. Os subsequentes levam muito menos tempo.

Criar instância do Acloud

O Acloud (link em inglês) é uma ferramenta de linha de comando no AOSP que ajuda os usuários a criar dispositivos virtuais Android, neste caso o Cuttlefish.

Se você estiver na mesma sessão de terminal usada para criar o código, prossiga. Caso contrário, primeiro execute novamente o script envsetup.sh e o mesmo comando lunch usado. Em seguida:

  1. Crie uma instância local do Acloud com:

    acloud create --local-image --local-instance
        
  2. Aceite as atualizações para os pacotes necessários.

  3. Se solicitado, reinicie a estação de trabalho para que todas as mudanças entrem em vigor.

  4. Selecione o dispositivo Cuttlefish.

Será exibida uma sessão VNC de boas-vindas com um dispositivo Android.

Você pode interagir com o dispositivo virtual na estação de trabalho usando o mouse e o teclado. Também é possível acompanhar a atividade nos registros enquanto você usa o dispositivo com o comando logcat do Android Debug Bridge (adb):

adb logcat
    

Fazer uma modificação

Atualize o código-fonte de acordo com esta lista de mudanças (link em inglês).

  1. Na raiz do checkout (diretório aosp/), navegue até o projeto frameworks/native do Git:

    cd frameworks/native
        
  2. Inicie um projeto temporário com:

    repo start <some-name> .
        
  3. Edite SurfaceFlinger.cpp para incluir as mudanças da lista no seguinte local:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
        
  4. Crie o código:

    m
        
  5. Atualize a build no dispositivo:

    adb root
        adb remount
        adb sync
        adb reboot
        acloud reconnect
        

Você verá uma mudança na cor no dispositivo.

Testar o código

Durante esta parte do codelab, executaremos um teste de exemplo que está na árvore de origem e já está falhando. Para executar o teste localmente, usaremos o Atest e testaremos o código com ele.

Para usar o teste:

  1. Execute:

    atest DevCodelabTest
        
  2. O teste falhará. Agora, vamos corrigir. Localize o código-fonte do teste com falha:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
        
  3. Em seguida, analise:

    platform_testing/tests/example/devcodelab
        
  4. Para que o arquivo seja editado, use o nome do teste e substitua o . por /, da seguinte maneira:

    android.test.example.devcodelab.DevCodelabTest
        

    O resultado é:

    src/android/test/example/devcodelab/DevCodelabTest.java
        
  5. Então, edite:

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

    Para substituir:

    Assert.assertTrue(false)
        

    Por:

    Assert.assertTrue(true)
        
  6. Execute o teste novamente para verificar se você o corrigiu:

    atest DevCodelabTest
        

Fazer upload do código para revisão

O Repo simplifica o uso do Git porque agrupa comandos como git clone de forma que funcionem em vários repositórios Git (ou projetos) de uma só vez.

Consulte Ferramentas de controle de origem para ver resumos do Git e do Repo com links para a documentação completa sobre como trabalhar com o código-fonte do Android. Consulte o repositório AOSP (em inglês) para ver a lista completa de projetos Git e os projetos individuais (caminhos) das ramificações associadas a cada projeto.

Para projetos no Git, o sistema de revisão de código baseado na Web, Gerrit, será usado (link em inglês).

  1. Depois de ter feito mudanças no projeto frameworks/native, execute estes comandos para fazer upload delas:

    cd frameworks/native
        repo start codelab .
        git add .
        git commit
        
  2. Para sua mensagem de confirmação, digite:

    Android codelab change
        Test: manual atest
        
  3. Faça upload da sua mudança:

    repo upload
        

Quando o upload for concluído, você verá uma mensagem parecida com esta:

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
    

Ver a mudança no Gerrit

Acesse o link exibido no terminal que é semelhante a este:

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

Isso conclui o codelab básico para desenvolvimento da Plataforma Android. Consulte Como enviar patches para ver as próximas etapas e o restante deste site para ver mais detalhes sobre o desenvolvimento do Android.

Reverter a mudança

Normalmente, depois do teste e da revisão/aprovação, você precisa enviar a mudança no Gerrit e integrá-la ao repositório.

Em vez disso, para os fins deste codelab, reverta a lista de mudanças clicando em Abandon no Gerrit.

Em seguida, saia da ramificação temporária associada no diretório do projeto nativo/frameworks (ou nos subitens):

repo abandon codelab .
    

Lembre-se também de reverter as mudanças no arquivo de teste. Como não aplicamos repo start, git commit e repo upload na mudança, podemos simplesmente redefinir o arquivo, desta forma (supondo que você esteja no aosp/platform_testing directory):

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

Pronto, você terminou. Bom trabalho!

Receber ajuda

Se você encontrar erros durante esse codelab, informe-os no link Feedback do site na parte inferior de qualquer página. Envie perguntas para o grupo android-building (links em inglês).