Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Compilando o Firefox OS

Uma vez que você já preparou seu sistema e baixou os arquivos e fez a configuração do código, você agora pode compilar o Boot to Gecko. Esse artigo vai explicar como fazer isso.

Atualize seu código

Se esta não é sua primeira compilação do B2G, você talvez queira baixar a última versão do código antes de iniciar a compilação. Para fazer isso, você deve atualizar as ferramentas B2G e as dependências, usando os seguintes comandos:

git pull
./repo sync -d

Você pode atualizar um repositório específico especificando o nome:

./repo sync gaia

O comando repo tem outras opções que podem ser interessantes: digite repo help para a lista completa de opções.

Compilando

Nota: Se você quiser customizar a compilação, você deve configurar o arquivo .userconfig. Veja o artigo Customização com o arquivo .userconfig para maiores detalhes.

Para compilar, basta executar o script build.sh:

cd B2G
./build.sh

Hora de mais uma pausa para um café, ou talvez um cochilo (especialmente se for sua primeira compilação). Assim como na etapa de configuração, na página anterior, se você está usando o sistema de arquivos do Android previamente extraído, você deve configurar a variável ANDROIDFS_DIR antes de executar build.sh.

Nota: Para mais instruções de como fazer um flashing de um novo binário no telefone, leia Instalando o Firefox OS em dispositivo móvel.

Compilando módulos específicos

Se você quer compilar um módulo específico, como o Gecko, você deve incluir o nome do módulo como parâmetro da chamada do script:

./build.sh gecko

Para atualizar apenas um aplicativo, você pode compilar apenas módulo gaia, por exemplo, usando a variável de ambiente BUILD_APP_NAME:

BUILD_APP_NAME=calendar ./build.sh gaia

Para saber quais módulos você pode compilar, execute o comando:

./build.sh modules

Configurando o número de processadores a ser usado

Por padrão, os scripts de compilação B2G usa o número de núcleos do processador do seu sistema mais dois como um número de tarefas paralelas a ser executada. Você pode alterar esse valor especificando o parâmetro -j quando executa build.sh. Isso pode ser útil se você estiver usando o sistema para outras coisas enquanto compila em segundo plano e precisa reduzir um pouco a carga da CPU. Também é útil quando você está tendo problemas na compilação, Isso pode fazer a leitura da saída de erros do processo de compilação mais fácil se você tem apenas uma tarefa por vez!

Por exemplo, para compilar usando apenas duas tarefas em paralelo:

./build.sh -j2

O caso mais comum para isso, é evitar compilações executando em paralelo. Isso faz a saída do processo muito mais fácil de ser interpretada, tornando mais fácil a resolução dos problemas de compilação. Para fazer isso execute:

./build.sh -j1

Compilando uma imagem multilíngue

Para compilar uma imagem multilingue, siga esses passos:

Gaia

  1. Determine quais idiomas do Gaia serão utilizados. Atualmente usamos os arquivos de idiomas locales/languages_dev.json e locales/languages_all.json como nossos arquivos Gaia de idiomas.
  2. Clone as localizações apropriadas do endereço https://hg.mozilla.org/gaia-l10n dentro de um diretório, nós o nomeamos gaia-l10n/. Você pode nomear o diretório como locales/. Será necessário clonar um repo para cada localização listada no arquivo de idiomas.
  3. No seu ambiente, configure a variável de ambiente LOCALE_BASEDIR como o caminho completo para o diretório configurado no item 2. Configure LOCALES_FILE para o caminho completo configurado no item 1.
  4. Você também pode configurar a variável GAIA_DEFAULT_LOCALE para informar a localização padrão.
cd gaia/locales/
hg clone https://hg.mozilla.org/releases/gaia-l10n/v1_2/es
Configure suas variáveis de ambiente:
 
export LOCALE_BASEDIR=$PWD/locales
export LOCALES_FILE=$PWD/locales/languages_dev.json
export GAIA_DEFAULT_LOCALE=es

O arquivo languages-dev.json pode ser substituído pelo seu próprio languages-own.json, que pode ser formado como esse. Você precisa adicionar uma entrada para cada repo clonado em seus diretórios de localização:

{
  "en-US"     : "English (US)",
  "es"        : "Español"
}

Desde que o bug 884752 foi solucionado (novembro de 2013), você pode usar o parâmetro GAIA_KEYBOARD_LAYOUTS para adicionar configurações de teclado (se disponível no Gaia) . 

Por exemplo, para adicionar configurações de teclado espanhol e italiano, execute os comandos ateriores incluindo
  GAIA_KEYBOARD_LAYOUTS=en,es,it

Nesse ponto, você está pronto para copiar (flash) o Gaia para seu telefone pela primeira vez. Conecte o telefone e certifique-se que a Depuração remota está ativada em Settings > Device Information > More Information > Developer.  Você precisa fazer isso somente a primeira vez, para sua própria compilação ter essa opção atvida como padrão, configure REMOTE_DEBUGGER=1:

 make clean && make production LOCALES_FILE=locales/languages-own.json

Se você quiser clonar e/ou atualizar todos os idiomas suportados, você pode usar esse script

Gecko

  1. Determine qual arquivo de idioma do Gecko vai usar. Nós atualmente usamos b2g/locales/all-locales como nosso arquivo de idioma.
  2. Clone as localizações apropriadas dentro de um diretório, o nome do diretório pode ser gecko-l10n/ .
  3. Clone compare-locales.
  4. No seu ambiente configure a variável L10NBASEDIR como o caminho completo do diretório do item 2. Configure MOZ_CHROME_MULTILOCALE como uma string delimitadas por espaço com as localizações do item 1.

    Inclua o diretório compare-locales/scripts à variável PATH, e compare-locales/lib à variável PYTHONPATH.

    Por exemplo,
    export L10NBASEDIR=$PWD/gecko-l10n
    export MOZ_CHROME_MULTILOCALE="ja zh-TW"
    export PATH="$PATH:$PWD/compare-locales/scripts"
    export PYTHONPATH="$PWD/compare-locales/lib"
    

    Uma vez que a configuração acima estiver pronta, você pode executar build.sh.

    Você pode usar .userconfig também:

    ## Gaia
    export GAIA_DEFAULT_LOCALE=es
    export LOCALE_BASEDIR=/b2g/gaia-l10n-transifex-v1.2/
    export LOCALES_FILE=/b2g/languages_propio.json
    
    ## Gecko
    export L10NBASEDIR='/b2g/gecko-l10n-v1.2'
    export MOZ_CHROME_MULTILOCALE="es-ES eu ca gl pt-BR"
    export PATH="$PATH:/b2g/compare-locales/scripts"
    export PYTHONPATH="/b2g/compare-locales/lib"
      

Existe algum mapeamento entre os idiomas do Gaia e do Gecko. Por exemplo, no Gaia, Espanhol é "es", mas no Gecko é traduzido para "Espanhol da Espanha" (es-ES)

Essas instruções podem mudar a medida que as coisas melhorarem.

Erros conhecidos

"Build failed!"

Se você receber uma mensagem genérica "Build failed" (A Compilação falhou), você sempre deve tentar reconectar seu telefone ao seu computador, algumas vezes o telefone pode perder a conexão por uma variedade de razões.

Note que configurar e compilar o B2G para Keon NÃO FUNCIONA no Mac. Você precisará de um Linux para compilar para esse telefone.

Erros específicos do Mountain Lion

1. Se você está compilando no OS X 10.8 "Mountain Lion" (Xcode 4.4.1 ou superior) e encontrar o seguinte erro:

external/qemu/android/skin/trackball.c:130:25: error: 'M_PI' undeclared (first use in this function)
Edite o arquivo: B2G/external/qemu/Makefile.android e inclua na linha 78:
MY_CFLAGS += -DM_PI=3.14159265358979323846264338327950288   #/* B2G_fix: not finding M_PI constant */
2. Se você está no Mountain Lion o seguinte erro durante a execução do script ./build.sh:
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:797:9: error: too many #pragma options align=reset

Substitua todas as ocorrências de '#pragma options align=reset' por '#pragma pack()' no arquivo /System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h

Undefined symbols "_sqlite3_androidopt_handle_pragma" and "_sqlite3_androidopt_open"

Esse erro aparece se você está compilando no OS X 10.7 ou superior com Xcode 4.5 or superior. Para resolver isso, aplique a correção https://groups.google.com/forum/#!msg/android-building/yAfPyUqCsiQ/7zvICk4GWjYJ no arquivo external/sqlite/dist/Android.mk.

KeyedVector.h:193:31: error: indexOfKey was not declared in this scope

Esse erro aparece quando a versão do gcc é muito recente. Instale a versão 4.6.x dos aplicativos gcc/g++/g++-multilib. Veja Customização com o arquivo .userconfig file para mais informações.

Nota da comunidade: É possível usar o 4.7.x com pequenas modificações no código B2G (as mensagens do gcc guiará você) mas você não conseguirá nenhuma ajuda! Seja na modificação do código ou na resolução dos bugs que você encontrar.

arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)

Se você receber essa mensagem, é provável que você esteja com pouca memória disponível. Certifique-se que existe memória suficiente antes de executar ./build.sh. Para executar sem problemas o sistema de ter 4GB de memória RAM.

"...is referenced by DSO" error

Se durante a compilação do emulador, você receber o erro: /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/triangleCM_intermediates/triangleCM: hidden symbol `_XGetRequest' in out/host/linux-x86/obj/STATIC_LIBRARIES/libSDL_intermediates/libSDL.a(SDL_x11dyn.o) is referenced by DSO.

Esse erro pode aparecer em algumas versões do binutils. Se você está executando num Debian estável, você pode usar o "gold linker" instalando o pacote binutils-gold. Observe que o gold linker é instalado pelo binutils, mas não é utilizado como padrão. binutils-gold faz exatamente isso.

Se você receber erros de compilação durante a execução de testes

Algumas vezes (principalmente após atualização da ferramenta de compilação ou do sistema operacional) você pode receber erros estranhos como esses após a etapa de compilação durante os testes pós-compilação:

Generating permissions.sqlite...
test -d profile || mkdir -p profile
run-js-command  permissions
WARNING: permission unknown:offline-app
WARNING: permission unknown:indexedDB-unlimited
build/permissions.js:122: NS_ERROR_UNEXPECTED: Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPermissionManager.add]
make[1]: *** [permissions] Error 3
make: *** [gaia/profile.tar.gz] Error 2

Nessa situação, tente apagar o diretório gaia/xulrunner-sdk e baixar o código novamente:

rm -r gaia/xulrunner-sdk

Isso apaga a cópia baixada e pré-compilada do XULRunner mas o sistema de compilação recupera automaticamente. Na sua próxima compilação uma nova cópia do XULRunner será automaticamente recuperada.

Cannot fetch platform/libcore

Se você tentar configurar sua compilacão B2G para o Nexus S (./config.sh nexus-s) e receber um erro relacionado com o libcore, isso é devido a um problema com o git linaro que o alimenta. Para resolver isso, baixe o manifesto B2G:

git clone https://github.com/mozilla-b2g/b2g-manifest.git

Edite o arquivo nexus-s.xml nesse repo, substituindo a entrada do git linaro por uma referência ao aosp, que deve ser lido como:

<default revision="refs/tags/android-4.0.4_r1.2"
              remote="aosp"
              sync-j="4" />

Faça um Commit dessas alterações (git commit -a) e altere o arquivo config.sh no branch master do repo principal do B2G que você baixou apontando para o seu manifesto local alterado no lugar do manifesto da Mozilla:

GITREPO=${GITREPO:-"file:///home/path/to/my/b2g-manifest"}

Erros "clang" quando compliar com Xcode 5 no Mac

Se você estiver usando o Mac OS X 10.8 com Xcode 5, é provável que você receba erros como esse:

clang: error: argument unused during compilation: '-include system/core/include/arch/darwin-x86/AndroidConfig.h'
clang: error: argument unused during compilation: '-U DEBUG'
clang: error: argument unused during compilation: '-U DEBUG'
clang: error: argument unused during compilation: '-MF out/host/darwin-x86/obj/EXECUTABLES/obbtool_intermediates/Main.d'
make: *** [out/host/darwin-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

Isso é devido ao fato do Xcode 5 alterar o compilador g++ em /usr/bin, que interrompe o processo de compilação se você tentar usá-lo para compilar. Uma solução de contorno para esse problema é editar a seguinte linha em build/core/combo/HOST_darwin-x86.mk:

de

HOST_CXX := g++

para

HOST_CXX := g++-4.6
ifeq (,$(wildcard /usr/local/bin/g++-4.6))
 HOST_CXX := g++
endif

Após isso, desinstale o gcc usando brew (assumindo que você executou o script de insalação do bootstrap no Mac OS) — se não executou, você precisa completar essa tarefa antes de continuar:

brew uninstall gcc-4.6

Agora reinstale o gcc com suporte ao multilib e c++:

brew install --enable-cxx https://gist.github.com/artlogic/6988658/raw/aeb9d1ea098274ad3f3fe2637b9df7f308a8a120/gcc-4.6.rb

Certifique-se que /usr/local/bin esteja no sua variável de ambiente PATH. Você pode fazer isso temporariamente digitando o seguinte comando:

export PATH=/usr/local/bin:$PATH

Para incluir o diretório na variável PATH definitivamente inclua essa linha no arquivo .bash_profile no seu diretório home.

Após configurar a variável PATH, certifique-se de que você consegue executar os seguintes comandos:

gcc-4.6 -v

g++-4.6 -v

Se algum desses comandos falhar, você vai precisar fazer um novo link usando brew com o seguinte comando:

brew link --overwrite gcc-4.6

Também é possível que /usr/bin/c++ não está apontando para clang++ como deveria ser com o Xcode5 instalado. Você pode verifique isso digitando:

ls -l /usr/bin/c++

O comando retornará alguma coisa como isso:

lrwxr-xr-x 1 root admin 7 Sep 19 11:40 /usr/bin/c++ -> clang++

Se c++ estiver apontando para alguma coisa diferente que clang++, resolva isso com os seguintes comandos:

sudo rm /usr/bin/c++

sudo ln -s /usr/bin/clang++ /usr/bin/c++

Não consegue copiar os arquivos do diretório de backup

Isso pode acontecer se perder conexão USB durante o processo de backup do dispositivo.

Quando for executar o script novamente, você pode receber o erro abaixo: (no exemplo o dispositivo é o peak).

Pulling files from ../../../backup-peak
cat: ../../../backup-peak/system/build.prop: No such file or directory
Found firmware with build ID
Pulling "libaudioeq.so"
cp: cannot stat `../../../backup-peak/system/lib/libaudioeq.so': No such file or directory
Failed to pull libaudioeq.so. Giving up.

> Build failed! <

Build with |./build.sh -j1| for better messages
If all else fails, use |rm -rf objdir-gecko| to clobber gecko and |rm -rf out| to clobber everything else.

Para resolver isso não é necessário remover os diretórios objdir-gecko ou out. Basta remover o diretório de backup:

$rm -rf backup-peak

Próximas etapas

Após compilar, sua próxima etapa depende para onde você compilou o Boot to Gecko. Para algum emulador ou para um dispositível móvel real. Veja os seguintes artigos para detalhes:

Enviando bugs no B2G/Firefox OS/Gaia

Uma vez que você conseguiu compilar o B2G/Firefox OS, você provavelmente vai querer começar a registrar os bugs de uma determinada versão. A comunidade do Firefox OS pode incrementar as coisas tão eficientemente quanto possível. Você vai querer registrar o bug no Bugzilla, no projeto"Firefox OS", mas você deve incluir detalhes específios da versão:

  1. Para começar, diga-nos o número da versão principal. Por exemplo, e.g. 1.4.0.0-prerelease. Isso pode ser facilmente encontrado no seu dispositivo em Settings > Device Information.
  2. Você pode fornecer mais identificadores específicos da versão retornando os hashes atuais dos repositórios do gaia e do gecko. Isso pode ser feito assim:
    #!/bin/bash
    (cd gaia;  echo "gaia  $(git rev-parse HEAD)")
    (cd gecko; echo "gecko $(git rev-parse HEAD)")

Etiquetas do documento e colaboradores

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