Como criar versões no Android

Como configurar o ambiente

Inicialize o ambiente com o script envsetup.sh. Observe que a substituição de source por . (um único ponto) economiza alguns caracteres, e o formato curto é mais comumente usado na documentação.

source build/envsetup.sh

ou

. build/envsetup.sh

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. A seguir, há alguns exemplos de comandos importantes:

  • lunch: lunch product_name-build_variant seleciona product_name como produto a ser criado e build_variant como a variante a ser criada e armazena essas seleções no ambiente que está sendo preparado para invocações subsequentes do m e outros comandos semelhantes.
  • m: executa versões do topo da árvore. Isso é útil porque você pode executar o make dentro de subdiretórios. Se você tiver a variável de ambiente TOP definida, ela será usada. Se você não tiver, o comando buscará a árvore no diretório atual para encontrar o topo dela. Você pode criar toda a árvore de código-fonte executando m sem argumentos ou criar destinos específicos definindo os nomes deles.
  • mma: cria todos os módulos no diretório atual e as respectivas dependências.
  • mmma: cria todos os módulos nos diretórios fornecidos e as respectivas dependências.
  • croot: cd para o topo da árvore.

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

hmm

Como escolher um destino

Escolha qual destino criar com o lunch. A configuração exata pode ser passada como um argumento. Por exemplo, o comando a seguir se refere a uma versão completa para o emulador, com toda a depuração ativada:

lunch aosp_arm-eng

Se executado sem argumentos, lunch solicitará que você escolha um destino no menu. Consulte Como selecionar uma versão do dispositivo para ver as configurações de versão de todos os dispositivos existentes.

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

Tipo da versão Uso
user Acesso limitado; adequado para produção
userdebug Como o user, mas com acesso root e capacidade de depuração; mais indicado para depuração
eng Configuração de desenvolvimento com outras ferramentas de depuração

A versão userdebug precisa se comportar da mesma forma que a user, com a capacidade de ativar depuração adicional, que normalmente viola o modelo de segurança da plataforma. Isso faz com que userdebug seja uma boa versão para testes de usuários com maiores recursos de diagnóstico. Ao desenvolver com a versão userdebug, siga as diretrizes do userdebug.

A versão eng prioriza a produtividade de engenharia para engenheiros que trabalham na plataforma. Ela desativa várias otimizações usadas para fornecer uma boa experiência ao usuário. Fora isso, a versão eng apresenta um comportamento semelhante ao das versões user e userdebug, para que os desenvolvedores de dispositivos possam ver como o código se comporta nesses ambientes.

Para ver mais informações sobre como criar e executar em hardwares reais, consulte Como executar versões.

Como compilar o código

Esta seção é um breve resumo para garantir que a configuração esteja concluída.

Crie tudo com m. O m pode processar tarefas paralelas com um argumento -jN. Se você não fornecer um argumento -j, o sistema de versão selecionará automaticamente uma contagem de tarefas paralelas que seja considerada ideal para seu sistema.

m

Como explicado acima, você pode criar módulos específicos em vez da imagem completa do dispositivo listando os nomes dos módulos na sua linha de comando m. Além disso, m oferece alguns pseudodestinos para fins especiais. Alguns exemplos:

  • droid: m droid é a versão normal. Esse destino está aqui porque o destino padrão requer um nome.
  • all: m all cria tudo o que o m droid cria, além de tudo que não tenha a tag droid. O servidor de versão o executa para garantir que tudo o que está na árvore e que tenha um arquivo Android.mk seja criado.
  • clean: m clean exclui todos os arquivos intermediários e de saída para esta configuração. É o mesmo que rm -rf out/.

Execute m help para ver o que outros pseudodestinos m oferecem.

Executar

Você pode executar sua versão em um emulador ou armazená-la em flash em um dispositivo. Você já selecionou seu destino de criação com lunch, e é improvável que ele seja executado em um destino diferente daquele para o qual foi criado.

Como realizar uma atualização flash com fastboot

Para realizar uma atualização flash de um dispositivo, use fastboot, que precisa ser incluído no seu caminho após a criação ser concluída. Consulte Como realizar uma atualização flash em um dispositivo para ver mais instruções.

Como emular um dispositivo Android

O emulador é adicionado ao seu caminho automaticamente pelo processo de criação. Para executá-lo, digite:

emulator

Como solucionar erros de criação comuns

Versão incorreta do Java

Se você estiver tentando criar uma versão do Android inconsistente com sua versão do Java, make será cancelado 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
************************************************************

Estas são as prováveis causas e soluções:

  • Falha ao instalar o JDK correto conforme especificado nos Requisitos do JDK. É necessário seguir as etapas apresentadas em Configurar o ambiente e Escolher um destino.
  • Outro JDK instalado anteriormente aparece no seu caminho. Inclua o JDK correto no início do seu caminho ou remova o JDK problemático.

Versão 3 do Python

O Repo foi projetado com uma funcionalidade específica do Python 2.x e é incompatível com o Python 3. Para usar o Repo, instale o Python 2.x:

apt-get install python

Sistema de arquivos indiferente a maiúsculas

Se você estiver criando em um sistema de arquivos HFS no macOS, poderá encontrar um erro como:

************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************

Siga as instruções em Como criar uma imagem de disco com diferenciação entre maiúsculas e minúsculas.

Sem permissão para USB

Na maioria dos sistemas Linux, por padrão, os usuários sem privilégios não podem acessar as portas USB. Se você encontrar um erro de permissão negada, siga as instruções em Como configurar o acesso por USB.

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