Construindo Android

Siga estas instruções para começar a construir o Android.

Configurando o ambiente

Inicialize o ambiente com o script envsetup.sh :

source build/envsetup.sh

ou

. build/envsetup.sh

Consulte o script em platform/build/envsetup.sh para obter descrições de comandos relacionados, incluindo almoço para selecionar alvos de dispositivos e tapas para criar aplicativos desagregados, como o aplicativo de TV de referência .

Você precisa emitir novamente este comando após cada repo sync para captar quaisquer alterações nesse script. Observe que substituir source por . (um único ponto) salva alguns caracteres, e a forma abreviada é mais comumente usada na documentação.

O script envsetup.sh importa vários comandos que permitem trabalhar com o código-fonte do Android, incluindo os comandos usados ​​neste exercício.

Para ver a lista completa de comandos disponíveis, execute:

hmm

Escolhendo um alvo

almoço

Escolha qual meta construir com lunch . lunch product_name - build_variant seleciona product_name como o produto a ser construído e build_variant como a variante a ser construída e armazena essas seleções no ambiente para serem lidas por invocações subsequentes de m e outros comandos semelhantes.

A configuração exata pode ser passada como argumento. Por exemplo, o comando a seguir refere-se a uma compilação completa do emulador, com toda a depuração habilitada:

lunch aosp_arm-eng

Se for executado sem argumentos, lunch solicitará que você escolha um alvo no menu, mas observe que o menu não inclui todas as possibilidades. Consulte Selecionando uma compilação de dispositivo para obter as configurações de compilação de todos os dispositivos com suporte no AOSP ou converse com pessoas da sua equipe sobre o almoço correto para o dispositivo em que você está trabalhando.

Todos os destinos de construção assumem o formato BUILD-BUILDTYPE , onde BUILD é um codinome referente à combinação de recursos específica. BUILDTYPE é um dos seguintes.

Tipo de construção Usar
do utilizador Acesso limitado; adequado para produção
depuração do usuário Como usuário, mas com acesso root e capacidade de depuração; muito próximo do desempenho da produção
inglês Configuração de desenvolvimento com tempo de construção mais rápido; mais adequado para o desenvolvimento diário

A compilação userdebug deve se comportar da mesma forma que a compilação user , com a capacidade de habilitar depuração adicional que normalmente viola o modelo de segurança da plataforma. Isso torna a construção userdebug boa para entender o desempenho e a potência usada pelo lançamento. Ao desenvolver com a compilação userdebug , siga as diretrizes do userdebug .

A construção eng prioriza a produtividade da engenharia para engenheiros que trabalham na plataforma. A compilação eng desativa várias otimizações usadas para maximizar o desempenho do tempo de execução. Caso contrário, a compilação eng é muito semelhante às compilações user e userdebug para que os desenvolvedores de dispositivos possam ver como o código se comporta nesses ambientes.

Para ver as configurações atuais do almoço, execute o comando:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Para obter mais informações sobre como criar e executar em hardware real, consulte Dispositivos Flashing .

tapas

O comando tapas configura a construção de aplicativos desagregados. Ele seleciona aplicativos individuais a serem desenvolvidos pelo sistema de compilação do Android. Diferentemente lunch , tapas não solicita a construção de imagens para um dispositivo.

Execute tapas help para obter mais informações sobre o comando.

Construindo o código

Esta seção é um resumo rápido para garantir que a configuração seja concluída.

Construa tudo com m . m pode lidar com tarefas paralelas com um argumento -jN . Se você não fornecer um argumento -j , o sistema de compilação selecionará automaticamente uma contagem de tarefas paralelas que considera ideal para o seu sistema.

m

Conforme explicado acima, você pode construir módulos específicos em vez da imagem completa do dispositivo listando seus nomes na linha de comando m . Além disso, m fornece alguns pseudo-alvos para fins especiais. Alguns exemplos são:

  • droid - m droid é a construção normal. Este destino está aqui porque o destino padrão requer um nome.
  • all - m all constrói tudo o que m droid faz, além de tudo que não possui a tag droid . O servidor de compilação executa isso para garantir que tudo o que está na árvore e possui um arquivo Android.mk seja compilado.
  • m - Executa construções do topo da árvore. Isso é útil porque você pode executar make dentro de subdiretórios. Se você tiver a variável de ambiente TOP definida, ela será usada. Caso contrário, ele procura a árvore no diretório atual, tentando encontrar o topo da árvore. Você pode construir toda a árvore do código-fonte executando m sem argumentos ou construir alvos específicos especificando seus nomes.
  • mma – Constrói todos os módulos no diretório atual e suas dependências.
  • mmma – Constrói todos os módulos nos diretórios fornecidos e suas dependências.
  • croot - cd para o topo da árvore.
  • clean - m clean exclui todos os arquivos de saída e intermediários desta configuração. É o mesmo que rm -rf out/ .

Execute m help para ver o que outros pseudotargets m fornecem.

Executando a compilação

Você pode executar sua compilação em um emulador ou atualizá-la em um dispositivo. Como você já selecionou seu destino de construção com lunch , é improvável que ele seja executado em um destino diferente daquele para o qual foi criado.

Piscando com fastboot

Para atualizar um dispositivo, use fastboot , que deve ser incluído no seu caminho após uma compilação bem-sucedida. Consulte Atualizar um dispositivo para obter instruções.

Emulando um dispositivo Android

O emulador é adicionado ao seu caminho automaticamente pelo processo de construção. Para executar o emulador, digite:

emulator

Compreendendo as impressões digitais de construção

Para rastrear e relatar problemas vinculados a uma versão específica do Android, é importante compreender a impressão digital da versão. A impressão digital da compilação é uma string exclusiva e legível que contém informações do fabricante emitidas para cada compilação. Consulte a descrição do FINGERPRINT na seção Parâmetros de compilação do Documento de definição de compatibilidade do Android (CDD) para obter a sintaxe precisa.

A impressão digital de compilação representa uma implementação e revisão específica do Android. Essa chave exclusiva permite que desenvolvedores de aplicativos e outros relatem problemas com versões específicas de firmware. Consulte Relatando bugs para o processo de relatório de problemas do Android.

Uma impressão digital de compilação encapsula todos os detalhes de implementação do Android:

  • APIs: Android e nativas, bem como comportamentos de APIs flexíveis
  • API principal e algum comportamento da interface do sistema
  • Requisitos de compatibilidade e segurança definidos no CDD
  • Especificações do produto e a configuração de recursos de uso empregada por aplicativos para dispositivos direcionados que atendem aos requisitos esperados
  • Implementações de componentes de hardware e software

Consulte o CDD para obter detalhes completos e Adicionar um novo dispositivo para obter instruções sobre como criar um dispositivo Android totalmente novo.

Solução de erros comuns de build

Versão Java errada

Se você estiver tentando criar uma versão do Android que seja inconsistente com sua versão do Java, make com uma mensagem como:

************************************************************
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
************************************************************

Aqui estão as prováveis ​​causas e soluções:

  • Falha ao instalar o JDK correto conforme especificado nos requisitos do JDK . Certifique-se de ter seguido as etapas em Configurando o ambiente e Escolhendo um destino .
  • Outro JDK previamente instalado aparecendo no seu caminho. Anexe o JDK correto ao início do seu caminho ou remova o JDK problemático.

Sem permissão USB

Por padrão, na maioria dos sistemas Linux, usuários sem privilégios não podem acessar portas USB. Se você vir um erro de permissão negada, siga as instruções em Configurando o acesso USB .

Se o ADB já estava em execução e não consegue se conectar ao dispositivo depois de configurar essas regras, você pode eliminá-lo com adb kill-server . Esse comando faz com que o ADB seja reiniciado com a nova configuração.