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.js
e 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-config
etest-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-clean
apaga 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/extensions
para 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