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
- Determine quais idiomas do Gaia serão utilizados. Atualmente usamos os arquivos de idiomas
locales/languages_dev.json
elocales/languages_all.json
como nossos arquivos Gaia de idiomas. - 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 comolocales/
. Será necessário clonar um repo para cada localização listada no arquivo de idiomas. - No seu ambiente, configure a variável de ambiente
LOCALE_BASEDIR
como o caminho completo para o diretório configurado no item 2. ConfigureLOCALES_FILE
para o caminho completo configurado no item 1. - 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
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) .
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
- Determine qual arquivo de idioma do Gecko vai usar. Nós atualmente usamos b2g/locales/all-locales como nosso arquivo de idioma.
- Clone as localizações apropriadas dentro de um diretório, o nome do diretório pode ser
gecko-l10n/
.- Para mozilla-central, use https://hg.mozilla.org/l10n-central/
- Para mozilla-aurora, use https://hg.mozilla.org/releases/l10n/mozilla-aurora/
- Para mozilla-beta ou mozilla-b2g18 ou mozilla-b2g26_v1_2, use https://hg.mozilla.org/releases/l10n/mozilla-beta/
- Clone compare-locales.
-
No seu ambiente configure a variável
L10NBASEDIR
como o caminho completo do diretório do item 2. ConfigureMOZ_CHROME_MULTILOCALE
como uma string delimitadas por espaço com as localizações do item 1.Inclua o diretório
Por exemplo,compare-locales/scripts
à variávelPATH
, ecompare-locales/lib
à variávelPYTHONPATH
.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 */
./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:
- 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.
- 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)")