Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Sistema de Compilação Primário

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:

  1. xulrunner-sdk-30: Xulrunner é usado para executar os scripts xpcshell no diretório GAIA_DIR/build/.
  2. 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 como DEBUG=1.
  3. webapp-manifests: Gera metadados dos aplicativos web para o process de compilação
  4. keyboard-layouts: Gera a configuração de layout padrão do teclado
  5. svoperapps: Baixa os aplicativos e gera os arquivos de configuração para a instalação dos aplicativos dependendo do país e operadora
  6. webapp-shared: Pega os arquivos que são usados em cada aplicativo do diretório compartilhado para o diretório build_stage.
  7. 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 para build_stage, e executa [app-directory]/build/build.js. Caso exista veja Build script for apps para detalhes.
  8. test-agent-bootstrap & test-agent-config: inclui duas regras de make, test-agent-config e test-agent-bootstrap-apps, que são usadas para configurar ambientes de teste para os aplicativos.
  9. 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.
  10. webapp-zip: Comprime cada aplicativo em arquivos zip separados e os coloca no diretório profile/. Arquivos no diretório shared/ declarados nos arquivos HTML dos aplicativos web são incluídos nessa etapa.
  11. optimize-clean: optimize-clean apaga os arquivos HTML para o idioma padrão
  12. settings.json (settings.js): Esse JavaScript gera as configurações padrão para o Firefox OS, que serão lidos pelo Gaia.
  13. contacts: Copia um arquivo de contatos pré-carregado para o seu perfil, se existir em GAIA_DISTRIBUTION_DIR.
  14. 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.
  15. create-default-data: Copia os dados padrão para o seu diretório de perfil.
  16. 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

 

 

Etiquetas do documento e colaboradores

 Colaboradores desta página: jwhitlock, rbrandao
 Última atualização por: jwhitlock,