Você pode ajudar a desenvolver o sistema operacional mais instalado na história. Sim, você está aqui para embarcar em uma aventura e 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:
- Ele mostrará um pouco do que é o fluxo de trabalho do desenvolvedor para os engenheiros Android que trabalham na plataforma (sistema operacional).
- 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:
- uma estação de trabalho física do Linux que atenda a todos os requisitos públicos;
- o Repo e o Git necessários para editar a base do código Android.
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
- Instale os pacotes necessários na estação de trabalho.
- 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
Navegue até o diretório principal:
cd ~
Crie um subdiretório de trabalho local dentro dele:
mkdir aosp
Navegue até o diretório:
cd aosp
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
Insira ou aceite suas credenciais do Git (nome, endereço de e-mail).
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 atualizar dispositivos.
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
Transmita o destino de compilação para o comando lunch, desta maneira:
lunch aosp_cf_x86_phone-userdebug
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:
Crie uma instância local do Acloud com:
acloud create --local-image --local-instance
Aceite as atualizações para os pacotes necessários.
Se solicitado, reinicie a estação de trabalho para que todas as mudanças entrem em vigor.
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).
Na raiz do checkout (diretório
aosp/
), navegue até o projetoframeworks/native
do Git:cd frameworks/native
Inicie um projeto temporário com:
repo start <some-name> .
Edite
SurfaceFlinger.cpp
para incluir as mudanças da lista no seguinte local:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Crie o código:
m
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:
Execute:
atest DevCodelabTest
O teste falhará. Agora, vamos corrigir. Localize o código-fonte do teste com falha:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
Em seguida, analise:
platform_testing/tests/example/devcodelab
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
Então, edite:
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
Para substituir:
Assert.assertTrue(false)
Por:
Assert.assertTrue(true)
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).
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
Para sua mensagem de confirmação, digite:
Android codelab change Test: manual atest
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!
Ajuda
Se você encontrar erros durante este 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).