O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

codelab para desenvolvedores Android

Você pode ajudar a desenvolver o sistema operacional mais amplamente instalado na história da Terra. Sim, você está aqui para embarcar na jornada de se tornar um engenheiro da plataforma Android.

Embora o caminho seja desafiador, a equipe do Android se esforça para simplificar sua jornada, a cada lançamento. E a equipe faz melhorias todos os dias por meio do trabalho direto no Android Open Source Project (AOSP).

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

Metas

A missão deste codelab é dupla:

  1. Para dar uma pequena amostra de como é o fluxo de trabalho do desenvolvedor para engenheiros Android que trabalham na plataforma (o sistema operacional).
  2. Incentive você a fornecer feedback sobre as ferramentas, a documentação e o fluxo de trabalho do desenvolvedor do Android.

Pré-requisitos

A lista de requisitos para este codelab é derivada daquelas para desenvolvimento de plataforma geral ( AOSP ). Para fazer este codelab, configure o seguinte:

Ambiente

Normalmente, os usuários constroem e desenvolvem diretamente na estação de trabalho. Como você pode estar trabalhando em vários terminais e muitos dos comandos usados ​​são específicos do terminal, será necessário executá-los novamente em cada sessão do terminal. Especificamente, eles incluem os comandos source build/envsetup.sh e lunch .

Configurar estação de trabalho

  1. Instale os pacotes necessários em sua estação de trabalho.
  2. Ainda em um terminal, instale o Repo e obtenha credenciais para todos os repositórios Git.

Inicializar e sincronizar o código

  1. Navegue até seu diretório inicial:

    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 mestre 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 -j8
    

As sincronizações iniciais podem levar uma hora ou mais.

Cada checkout de repo é representado por um arquivo de manifesto . É permitido ter mais de 1 checkout de repo por vez, desde que existam em diretórios distintos. Mas observe que cada check-out e compilação equivalem a aproximadamente 300 GB de uso (e crescente), portanto, limite-se a 2 check-outs de repo ou aumente seu sistema com uma unidade secundária.

Crie o código

Para compilar o Android, você deve selecionar um tipo de dispositivo de destino para compilar com o comando lunch . Um destino é uma permutação de dispositivo, como um modelo específico ou fator de forma.

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

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

  1. Configure seu ambiente para criar dispositivos Android executando o seguinte comando na raiz do checkout do código-fonte:

    source build/envsetup.sh
    
  2. Passe o destino de compilação para o comando lunch, assim:

    lunch aosp_cf_x86_64_phone-userdebug
    
  3. Crie o código de qualquer lugar em seu checkout com:

    m
    

Espere que a primeira compilação leve horas. Compilações subsequentes levam significativamente menos tempo.

Criar uma instância Acloud

Acloud é uma ferramenta de linha de comando em AOSP que auxilia os usuários na criação de dispositivos Android virtuais, neste caso o Cuttlefish.

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

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

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

  3. Se solicitado, reinicie sua estação de trabalho para que todas as alterações entrem em vigor.

  4. Selecione o dispositivo Cuttlefish.

Você deve ser saudado com uma sessão VNC contendo um dispositivo Android!

Você pode interagir com o dispositivo virtual em sua estação de trabalho usando o mouse e o teclado. Você também pode acompanhar a atividade nos logs enquanto usa seu dispositivo empregando o comando Android Debug Bridge (adb) logcat :

adb logcat

Faça uma mudança

Atualize o código-fonte seguindo este exemplo de lista de alterações .

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

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

    repo start <some-name> .
    
  3. Edite SurfaceFlinger.cpp para incluir as atualizações da lista de alterações no seguinte local:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Encontre esta linha:

    postComposition();
    
  5. Substitua essas duas linhas pelo seguinte:

    postComposition();
    mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f},
                              vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
    updateColorMatrixLocked();
    
  6. Crie o código:

    m
    
  7. Atualize a compilação no dispositivo:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. Se você for solicitado a selecionar um dispositivo, escolha aquele que mostra o menor tempo decorrido. (Este é provavelmente o último na lista que você vê.) Para ver todas as instâncias de dispositivos virtuais, use os comandos acloud list e acloud list -v .

Verifique se você vê uma mudança de cor no dispositivo selecionado semelhante ao que mostra a Figura 1.

Example of a successful color change

Figura 1. Aparência da tela após mudança de cor bem-sucedida

Teste seu código

Esta parte do codelab utiliza um teste de exemplo que está na árvore de origem e está falhando. Isso emprega o Atest para executar o teste localmente e testar o código.

Para usar o teste, siga estas instruções:

  1. Correr:

    atest DevCodelabTest
    
  2. O teste falhará. Para corrigi-lo, encontre o código-fonte do teste com falha:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. Então olhe aqui

    platform_testing/tests/example/devcodelab
    
  4. Para obter o arquivo para editar, pegue o nome do teste em android.test.example.devcodelab.DevCodelabTest e substitua o . com / , para obter este resultado:

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

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

    substituir

    Assert.assertTrue(false)
    

    com

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

    atest DevCodelabTest
    

Carregue seu código para revisão

O Repo simplifica o uso do Git agrupando comandos como git clone para funcionar em vários repositórios Git (ou projetos) de uma só vez.

Consulte Ferramentas de controle de código-fonte para obter uma visão geral 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 para obter a lista completa de projetos Git e os projetos individuais (caminhos) para ramificações associadas a cada projeto.

Para revisão de código de seus projetos no Git, você usará o sistema de revisão de código Gerrit baseado na Web.

  1. Assumindo que você fez suas alterações nos frameworks/native , execute estes comandos para carregá-los:

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

    Android codelab change
    Test: manual atest
    
  3. Carregue a sua alteração:

    repo upload
    

Se você for bem-sucedido, verá uma mensagem semelhante a 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

Veja sua mudança em Gerrit

Acesse o link, impresso no terminal, que se assemelha a este:

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

Isso conclui o codelab inicial para o desenvolvimento da plataforma Android. Consulte Enviando patches para as próximas etapas e, para obter detalhes completos sobre o desenvolvimento do Android, consulte o restante deste site.

Reverter sua alteração

Normalmente, após o teste e após a revisão e aprovação, você envia sua alteração no Gerrit e a mescla no repositório.

Em vez disso, para fins deste codelab, reverta sua lista de alterações clicando em Abandon in Gerrit.

Em seguida, abandone a ramificação temporária associada no diretório frameworks/native project (ou seus subdiretórios):

repo abandon codelab .

Lembre-se também de reverter as alterações feitas no arquivo de teste. Como você não repo start , git commit e repo upload da alteração, você pode redefinir o próprio arquivo. Supondo que você esteja no aosp/platform_testing directory , use o seguinte para redefinir o arquivo:

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

Neste ponto, você está feito! Bom trabalho!

Obter ajuda

Se você encontrar erros durante este codelab, informe-os usando o link Rastreador de problemas na parte inferior de qualquer página. Envie perguntas para o grupo de construção de androides .