Este artigo necessita de uma revisão editorial. Como posso ajudar.
Esse artigo explica como o sistema de compilação do Gaia funciona, incluindo o makefile, o processo de compilação, as variáveis de ambiente e potenciais customizações.
A maioria do trabalho significativo das etapas de uma compilação é executado por scripts que estão no subdiretório build/ do Gaia, que são executados usando make, node.js e XPCShell (também conhecido como JS Shell), um ambiente de execução do XULRunner. O sistema de compilação do Gaia contem mutas ferramentas de ajuda que o auxiliam para instalar, testar, localizar e empacotar aplicativos web em um dispositivo real. Também possibilita os desenvolvedores customizar o Gaia, por exemplo, trocando o papel de parede padrão, toques do telefone e configurações.
Nota: XPCShell e similar ao node.js, mas com a capacidade adicional de executar alguns scripts de JavaScript "Mozilla-flavored". Possibilitando do Gaia compilar scripts para ser executado dentro de uma extensão Firefox.
O Makefile
O make file é composto por um grupo de objetivos. Essa seção explica os mais úteis.
install-gaia
Instalar todos os aplicativos Gaia para seu dispositivo. Se você quiser trazer somente um aplicativo específico, você pode utilizar o parâmetro APP como descrito a seguir:
APP=calendar make install-gaia
Esse diretório deve existir dentro do diretório de aplicativos Gaia (por exemplo., apps).
reset-gaia
Funciona da mesma forma que install-gaia mas, primeiro apaga tudo e configura para as permissões padrão depois de instalar todos os aplicativos. Os aplicativos ficarão em /data/local da mesma forma como ocorre nas compilações da engenharia. Isso também traz as aplicações de teste e depuração.
Cuidado: Utilizando a variável de ambiente APP com reset-gaia aparementemente funciona, mas colocará seu telefone em um estado no qual fica inutilizado (que pode ser recupardo executando esse objetivo novamente sem a variável APP). Assim não faça isso.
production
O mesmo que reset-gaia mas instala os aplicativos web em webapps /system/b2g ao invés de /data/local. Esse objetivo basicamente possibilita você emular compilações de usuário. Também traz o mesmo conjunto de de aplicativos instalados na compilação do usuário.
Cuidado: Utilizando a variável de ambiente APP com production aparementemente funciona, mas colocará seu telefone em um estado no qual fica inutilizado (que pode ser recupardo executando esse objetivo novamente sem a variável APP). Assim não faça isso.
reference workloads
Esses objetivos trazem tamanhos variáveis de carga de trabalho para o dispositivo, nos ajudando a corrigir problemas de performance e escalabilidade. Esses objetivos aceitam a variável de ambiente APP, ou APPS que pode conter nomes dos aplicativos separados por espaço, por exemplo:
APP=sms make reference-workload-light
APPS="sms communications/contacts" make reference-workload-heavy
Nota: Para maiores informações, leia Modificando o Gaia: Reference workloads.
Variáveis de ambiente
Algumas variáveis de ambiente permitem você controlar alguns aspectios da compilação e instalação em seu dispositivo, por exemplo:
B2G_SYSTEM_APPS=1
Essa variável de ambiente permite você enviar um aplicativo para /system/b2g ao invés de /data/local. Você pode usar isso quando você trabalhar com uma compilação de usuário. Essa variável é automaticamente ajustada ao executar make production. Isso pode ser usado para install-gaia ou reset-gaia.
GAIA_OPTIMIZE=1
Isso dispara um passo de otimização nos arquivos JavaScript. É automaticamente ajustada ao executar make production. Pode ser utilizada para install-gaia ou reset-gaia.
PRODUCTION=1
Basicamente é um alias para make production.
DEBUG=1
Gera um perfil de depuaração para ser usado com testes unitários do Gaia ou quando for desenvolver seu aplicativo Firefox OS no Firefox. Você deve apagar o diretório de perfil existente antes de gerar um outro.
DEVICE_DEBUG=1
Desabilitar o bloqueio de tela no dispositivo.
GAIA_DEVICE_TYPE=phone
Essa variável permite você compilar para um dispositivo específico de uma diferente 'app.list'. Todos os arquivos 'app.list' estão armazenados em subdiretórios de /build/config/$(GAIA_DEVICE_TYPE)/.
O valor padrão de GAIA_DEVICE_TYPE é phone.
Nota: para maiores detalhes e mais opções consulte nosso guia de Opções do Make.
Processo de compilação
Esse é o processo de compilação quando o make é executado no diretório do Gaia. As regras são executadas na seguinte ordem:
- xulrunner-sdk-30: Xulrunner é usado para executar os scripts xpcshell no diretório
GAIA_DIR/build/. - preferences: Gera as preferências padrões para o Firefox OS; gera o arquivo
user.jse o coloca no dispositivo, onde possa ser lido pelo Gecko. Observer que os valores devem ser alterados com variáveis de ambiente diferentes comoDEBUG=1. - webapp-manifests: Gera metadados dos aplicativos web para o process de compilação
- keyboard-layouts: Gera a configuração de layout padrão do teclado
- svoperapps: Baixa os aplicativos e gera os arquivos de configuração para a instalação dos aplicativos dependendo do país e operadora
- webapp-shared: Pega os arquivos que são usados em cada aplicativo do diretório compartilhado para o diretório build_stage.
- app-makefiles: Makefiles no diretório
app: São executados se existirem. Para os aplicativos que não possuírem um Makefile associado, o Makefile do Gaia copia o diretório do aplicativo parabuild_stage, e executa[app-directory]/build/build.js. Caso exista veja Build script for apps para detalhes. - test-agent-bootstrap & test-agent-config: inclui duas regras de make,
test-agent-configetest-agent-bootstrap-apps, que são usadas para configurar ambientes de teste para os aplicativos. - webapp-optimize: Esse script contém vários procedimentos de otimização incluindo minificação de JavaScript, concatenação de localização de arquivos de recursos em arquivos JSON e geração de arquivos HTML para o idioma padrão se necessário.
- webapp-zip: Comprime cada aplicativo em arquivos zip separados e os coloca no diretório
profile/. Arquivos no diretórioshared/declarados nos arquivos HTML dos aplicativos web são incluídos nessa etapa. - optimize-clean:
optimize-cleanapaga os arquivos HTML para o idioma padrão - settings.json (settings.js): Esse JavaScript gera as configurações padrão para o Firefox OS, que serão lidos pelo Gaia.
- contacts: Copia um arquivo de contatos pré-carregado para o seu perfil, se existir em
GAIA_DISTRIBUTION_DIR. - extensions: Copia as extensões de
GAIA_DIR/tools/extensionspara o seu diretório do perfil, configurações diferentes permitem especificar a cópia de extensões diferentes. - create-default-data: Copia os dados padrão para o seu diretório de perfil.
- installed-extensions.json (additional-extensions.js): Finalmente, esse script baixa algumas extensões adicionais para o seu perfil.
Diagrama de dependência do makefile do Gaia:

Build Script para os aplicativos
Por padrão, o Makefile do Gaia copiará todos os aplicativos para o diretório build_stage e executará [app directory]/build/build.js se existir. Se o aplicativo possuir um Makefile para compilá-lo, você precisa publicar um comando no Makefile para copiar os arquivos do aplicativo para o diretório build_stage e executar build/build.js caso necessário.
Por exemplo, o aplicativo Camera precisa do arquivo r.js para require.js e também executar um script de compilação JavaScript para customizar a máxima resolução, assim existe um Makefile e um arquivo build/build.js no diretório do aplicativo Camera para customizar o processo de compilação:
Abaixo um fluxograma para ilustrar como o app-makefiles funciona:

Customizando as preferências
Se você tiver um conjunto de preferências customizadas e precisar configurá-las toda vez que fazer um flash para seu dispositivo, você pode criar um arquivo chamado custom-prefs.js dentro do diretório build/config. Isso o protege de ser sobrescrito.
Abaixo algumas preferências úteis:
// this enables marionette which lets you run performance tests
// see https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Platform/Testing/Gaia_performance_tests
user_pref("marionette.defaultPrefs.enabled", true);
// this sets the port for remote debugging your application on the device
user_pref("devtools.debugger.remote-port", 60000);
// this enables the remote debugger
user_pref("devtools.debugger.remote-enabled", true);
// this outputs debug information about the Radio Interface Layer in logcat
user_pref("ril.debugging.enabled", true);
Esse arquivo é lido a cada vez que um perfil é gerado. A maneira mais segura de garantir que tudo será gerado é apagar o seu perfil antes de iniciar o processo:
rm -rf profile && make profile
Então você pode usar o objetivo install-gaia.
Perguntas frequentes
O dispositivo permanece preto depois de um flash
Isso pode acontecer se você fizer um flash no seu dispositivo enquanto ele estiver no modo "idle". Para consertar isso apenas reinice o B2G usando o seguinte comando a partir do terminal:
adb shell stop b2g && adb shell start b2g