Эта статья нуждается в редакционном обзоре. Как вы можете помочь.
После того как вы запустили set up your build system и выполняется ваш процесс initial pull and configure кода, вы можете построить загрузки для Gecko. Это руководство объясняет, как.
Обновление кода
Если это ваш не первый раз сборки B2G, вы, возможно, захотите, вытащить последний код, прежде чем начать собирать. Чтобы сделать это, вы должны обновить оба инструмента B2G и зависимости, используя следующие две команды:
git pull ./repo sync -d
-d Опция включает различные проекты заголовка, для пересмотра Android манифеста (т.е. мейнстрим версию из хранилища по умолчанию). Это полезно, если вы сделали изменения в репозиториях (и связанные с этим изменения исходных), но вы хотите вернуться к главной версии временно. Это действительно придаст вашей постановке или рабочий каталог изменяется нетронутым (см the following SO question для полного объяснения). Если вы не трогал исходный код, вы можете использовать команду нормально:
git pull ./repo sync
Вы можете обновить конкретной цели make, указав её имя:
./repo sync gaia
У команда repo есть и другие варианты, которые могут быть интересны; repo help даст вам много информации.
Создание
Примечание: Перед созданием, вы можете настроить .userconfig
фаил сборку. Увидеть Customization with the .userconfig file для получения дополнительной информации.
Создать загрузочные для Gecko, просто используйте инструмент build.sh:
cd B2G ./build.sh
Время для другого перерыва на кофе или, возможно, сон (особенно, если это ваш первый билд, оно займет около 30 минут на Core i7 с 8 Гб оперативной памяти). Как и в шаге настроить, на предыдущей странице, если вы используете каталог ранее извлеченных системных файлов Android, вы должны установить ANDROIDFS_DIR перед запуском build.sh
.
Примечание: Для более подробных инструкций по перепрограммированию новой сборки на телефон, читать Installing Firefox OS on a mobile device.
Создание специальных модулей,
Если вы хотите построить только конкретный модуль, такой как Gecko, вы можете задать его по имени:
./build.sh gecko
Для того, чтобы обновить только одну заявку, вы можете построить только gaia
модуль с помощью BUILD_APP_NAME
переменная среды:
BUILD_APP_NAME=calendar ./build.sh gaia
Чтобы получить список модулей, которые вы можете построить, вы можете сделать:
./build.sh modules
Установка количества процессорных ядер для использования
По умолчанию, B2G построение сценария использует количество ядер вашей системмы, плюс два, как число параллельных задач для запуска. Вы можете изменить это, задав параметр -j при запуске build.sh
. Это может быть удобно, если вы используете вашу систему для других вещей, а созданию на заднем плане нужно немного уменьшить нагрузку на процессор. Это также удобно, когда вы испытываете при построении проблеммы, это может сделать вывод Ошибки при чтении из процесса сборки легче, когда у вас есть только одна задача процесса в это время!
Например, чтобы построить с помощью всего двух параллельных задач:
./build.sh -j2
Наиболее распространенным примером использования этого, заключается в предотвращении построения работающего параллельно для остальных. Это делает вывод процесса намного проще для чтения, и позволяет легче разобраться с проблеммой сборки. Для этого:
./build.sh -j1
Создание multilocale
Чтобы создать multilocale сборки, выполните следующие действия:
Gaia
- Определите, какие Gaia языки использовать. Мы в настоящее время используюем
locales/languages_dev.json
иlocales/languages_all.json
как наши Gaia языковые файлы. - Клонирование соответствующие локали https://hg.mozilla.org/gaia-l10n в каталоге; мы используем
gaia-l10n/
. You could use thelocales/
directory . Вы должны будете клонировать репо для каждого региона, указанного в файле языках. - В вашей среде, установите
LOCALE_BASEDIR
к абсолютному пути каталога в шаге 2. SetLOCALES_FILE
к абсолютному пути к файлу на шаге 1. - Кроме того, вы можете установить
GAIA_DEFAULT_LOCALE
Если вы хотите установить локаль по умолчанию.
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
И languages-dev.json
может быть заменен самостоятельно languages-own.json
Путь, который мог быть сформирован как этот. Вы должны добавить запись на каждый репо клонированных в каталоге локали .:
{ "en-US" : "English (US)", "es" : "Español" }
Ошибка 884752(ноябрь 2013), чтобы добавить раскладки клавиатуры (если имеются в Gaia) используйте параметр GAIA_KEYBOARD_LAYOUTS
Ошибка: https://bugzilla.mozilla.org/show_bug.cgi?id=884752
Макеты: https://github.com/mozilla-b2g/gaia/tree/v1.2/keyboard/layouts
Например, чтобы добавить на испанском и итальянском языках раскладку клавиатуры, выполните предыдущую команду добавления
GAIA_KEYBOARD_LAYOUTS=en,es,it
В этот момент вы готовы подключать Gaia к телефону в первый раз. Подключите телефон и убедитесь, что удаленная отладка проверяется Settings > Device Information > More Information > Developer. Вы должны сделать это один раз, для собственного телосложения Gaia прив включен благодаря REMOTE_DEBUGGER=1:
make clean && make production LOCALES_FILE=locales/languages-own.json
Если вы хотите клонировать и / или обновить все поддерживаемые языки для той или иной отрасли, вы можете использовать this script
Gecko
- Определите, какие Gecko языки добавить в использовании. Мы в настоящее время используем b2g/locales/all-locales как Gecko язык файла.
- Клонирование соответствующих локали в каталоге; это может быть gecko
-l10n/
.- Для Mozilla-central, используйте https://hg.mozilla.org/l10n-central/
- Для mozilla-aurora, используйте https://hg.mozilla.org/releases/l10n/mozilla-aurora/
- Для mozilla-beta или mozilla-b2g18 или mozilla-b2g26_v1_2, используйте https://hg.mozilla.org/releases/l10n/mozilla-beta/
- Клон compare-locales. Если вы предпочитаете Git, пожалуйста, убедитесь, что используете RELEASE_0_9_7 tag.
-
В вашей среде, установите
L10NBASEDIR
к абсолютному пути каталога в шаге 2. SetMOZ_CHROME_MULTILOCALE
в строку разделенных пробелами районов на шаге 1.Добавить
Например,compare-locales/scripts
dir в вашемPATH
, иcompare-locales/lib
на вашPYTHONPATH
.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"
После того как выше написанное настроено, вы можете запустить build.sh.
Вы можете use .userconfig а также:
## 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"
Есть некоторые различия между Gaia языком и Gecko . Например, в Gaia, Spanish "es", а на Gecko tranlated к "Spanish of Spain" (es-ES)
Эти инструкции помогут нам сгладить многие вещи.
Известные ошибки
"Построить не удалось!"
Если вы получаете общем "Построить не удалось" сообщение, вы всегда должны попытаться восстановить подключение телефона к компьютеру; Иногда телефон может быть демонтирована по множеству причин.
Обратите внимание, что настройки и создание B2G для Keon не работает на Mac. Вы должны будете использовать Linux для создания для этого устройства.
Mountain Lion конкретных ошибок сборки
1. Если вы строите на OS X 10.8 "Mountain Lion" (Xcode 4.4.1или выше) и следующая ошибка:
external/qemu/android/skin/trackball.c:130:25: error: 'M_PI' undeclared (first use in this function)Отредактируйте файл:
B2G/external/qemu/Makefile.android
and add in line 78:
MY_CFLAGS += -DM_PI=3.14159265358979323846264338327950288 #/* B2G_fix: not finding M_PI constant */
/System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h:797:9: error: too many #pragma options align=reset
Замените все экземпляры на '#pragma options align=reset' with '#pragma pack()' inside /System/Library/Frameworks/IOKit.framework/Headers/usb/USB.h
Неопределенные символы "_sqlite3_androidopt_handle_pragma" и "_sqlite3_androidopt_open"
Эта ошибка появляется, если вы строите на OS X 10.7 или более новую версию с Xcode 4.5 или более поздней версии. Чтобы исправить это, примените патч на https://groups.google.com/forum/#!msg/android-building/yAfPyUqCsiQ/7zvICk4GWjYJ для external/sqlite/dist/Android.mk файл.
KeyedVector.h:193:31: error: indexOfKey не был объявлен в этой области
Эта ошибка появляется, когда ваша версия GCC слишком новая. Установите gcc/g++/g++-multilib 4.6.x versions. Увидеть Customizing with the .userconfig file для получения дополнительной информации.
Сообщество Примечание: Можно использовать gcc 4.7.x с небольшими изменениями в коде B2G (GCC поможет вам), но вы не получите никакой помощи! Ни с изменения кода, ни с ошибками не встретите.
arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)
Если вы видите это сообщение, скорее всего это означает, что свободной памяти не хватает. Убедитесь, что имеется достаточно свободной памяти перед запуском ./build.sh
. Это должен работать нормально, если ваша система имеет 4GB of RAM.
"...is referenced by DSO" ошибка
При создании эмулятора, если вы получаете /usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/triangleCM_intermediates/triangleCM: скрытый символ `_XGetRequest' in out/host/linux-x86/obj/STATIC_LIBRARIES/libSDL_intermediates/libSDL.a(SDL_x11dyn.o) ссылается DSO.
Вы можете получить это с некоторыми версиями в Binutils. Если вы запустите Debian Stable, вы можете использовать gold линкер путем установки пакета binutils-gold
. Следует отметить, что gold линкер уже установлены binutils
, но это не используется default; binutils-gold
делает именно это.
Если вы получаете ошибки построения в то время как система сборки выполняет тесты
Иногда (особенно после сборки инструмента или обновления операционной системы) вы получите странные ошибки, как это, когда система сборки работает его испытания после сборки:
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
В этой ситуации, попробуйте удалить gaia/xulrunner-sdk
каталог и повторно потянув код:
rm -r gaia/xulrunner-sdk
Это удаляет загруженный, предварительно скомпилированную копию XULRunner которую система сборки извлекает автоматически; на следующей сборке, новой копии XULRunner будет автоматически восстановлен.
Не удалось получить platform/libcore
Если вы пытались настроить ваш B2G построенный для Nexus S (./config.sh nexus-s
) и получили ошибку, связанную с libcore, это из-за проблем с Линаро Git, которая кормится тут. Это исправит, проверка на B2G манифест, вот так:
git clone https://github.com/mozilla-b2g/b2g-manifest.git
Редактировать nexus-s.xml
подать в этом репо, заменяя запись Линаро Git со ссылкой на AOSP ходом, который следует читать както так:
<default revision="refs/tags/android-4.0.4_r1.2" remote="aosp" sync-j="4" />
Фиксировать эти изменения (git commit -a
) а затем изменить config.sh
подать в главном отделении главного B2G репо, что вы проверили, чтобы указать на модифицированной местного манифеста вместо Mozilla одного:
GITREPO=${GITREPO:-"file:///home/path/to/my/b2g-manifest"}
Clang ошибки при сборке Xcode 5 on Mac
Если вы строите на Mac OS X 10.8 with Xcode 5, Вы, вероятно, увидите следующие ошибки:
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
Это происходит потому, Xcode 5 changes the g++ compiler in /usr/bin
, который тормозит процесс сборки, если вы пытаетесь использовать его для компиляции. Для того, чтобы обойти эту проблему, измените следующую строку в build/core/combo/HOST_darwin-x86.mk:
HOST_CXX := g++
для
HOST_CXX := g++-4.6 ifeq (,$(wildcard /usr/local/bin/g++-4.6)) HOST_CXX := g++ endif
Далее необходимо удалить gcc, используя настройку (это предполагает, вы запустите Mac OS bootstrap script — если нет, то вы должны будете заполнить этот шаг, прежде чем продолжить):
brew uninstall gcc-4.6
Теперь тоже самое gcc с мультибиблиотеки и c++ поддержка:
brew install --enable-cxx https://gist.github.com/artlogic/6988658/raw/aeb9d1ea098274ad3f3fe2637b9df7f308a8a120/gcc-4.6.rb
Убедитесь /usr/local/bin на вашей PATH. Вы можете сделать это временно, набрав следующую команду в командной подсказке:
export PATH=/usr/local/bin:$PATH
Вы можете сделать выше изложенное изменение постоянными, добавив его .bash_profile
файл в домашнем каталоге.
После того как вы установите PATH, убедитесь, что вы можете запустить обе из следующих команд:
gcc-4.6 -v g++-4.6 -v
Если какой-либо из этих команд выпадет, то Вам потребуется заново связать ваш gcc using brew с помощью следующей команды:
brew link --overwrite gcc-4.6
Это также возможно, что /usr/bin/c++
не указывает на clang++ как это и должно быть с Xcode 5 installed. Вы можете определить это, введя следующее:
ls -l /usr/bin/c++
Она должна возвращать что-то вроде этого:
lrwxr-xr-x 1 root admin 7 Sep 19 11:40 /usr/bin/c++ -> clang++
Если c++ указывает на нечто иное, чем clang++, обновить с помощью следующих команд:
sudo rm /usr/bin/c++ sudo ln -s /usr/bin/clang++ /usr/bin/c++
Невозможно вытянуть файлы из резервной копии каталога
Это может произойти, когда соединение USB не работает, а сценарий извлекает данные от устройства к компьютеру.
Когда вы запустите скрипт еще раз, вы, вероятно, получите следующее (пример для пик устройства):
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.
Чтобы решить эту проблему, это не нужно вынимать всю objdir-gecko из каталогов. Просто удалите каталог для резервного копирования, как это (для примера выше):
$rm -rf backup-peak
Вопросы Эмулятор сборки
Если вы делаете эмулятор построение, нужно обратить внимание на эти вопросы:
Во-первых, обратите внимание, что вы не должны использовать эмулятор x86 - это трудно установить и не очень хорошо поддерживается.
Далее, сборка-система для эмулятора строит как 32-битные, так и 64-битные версии эмулятора. Так, как эмулятор зависит от OpenGL, означает, что вы должны иметь как 32-битные, так и 64-битные версии OpenGL библиотеки установленые в вашей системе. Смотрите обсуждение в bug 897727.
Есть два способа, которыми вы можете решить эту проблему:
Решение #1: оба 32bit и 64bit OpenGL установлен LIBS, с правом символические ссылки
Если ваш Linux дистрибутив имеет мультибиблиотечные пакеты для OpenGL libraries, вы можете попытаться установить их. Затем вам придется вручную создать некоторые символические ссылки.
Например, вот ситуация на Ubuntu 12.04 LTS x86-64. На этом распределении, libgl1-mesa-dev
package не может быть установлен одновременно в x86-64 и i386 версии, но вы можете иметь следующая комбинация пакетов одновременно установлены:
sudo apt-get install libgl1-mesa-dev libglapi-mesa:i386 libgl1-mesa-glx:i386
После выполнения этой команды вам все равно придется вручную создать несколько символических ссылок для эмулятора, строят, чтобы добиться успеха:
sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Решение #2: просто патч эмулятор так это только создает 64bit
Просто внесите this patch для sdk/ git repository под B2G repo. Это приведет B2G emulator к попыткам построить 64bit emulator только если вы находитесь на 64bit system, Таким образом, избегая каких-либо проблем с мультибиблиотекой. 32bit emulator в любом случае не должен использоваться на 64bit system. Это не простое решение, до этого патча в конечном итоге bit-rots.
Следующий шаг
После создания, ваш следующий шаг зависит от того, как вы построили Boot на Gecko или эмулятор или для реального мобильного устройства; детали в следующих статьях:
Отправка ошибок на B2G/Firefox OS/Gaia
После того как вы получили B2G/Firefox OS построение работает, вы начнете подавать ошибки против этой конкретной версии, Firefox OS сообщество может улучшить положение вещей как можно более эффективно. Вы хотите, чтобы file the bug on Bugzilla, вместе "Firefox OS" проект, дадут включить специфику версии:
- Для начала, расскажите основной номер версии, e.g. 1.4.0.0-prerelease. Это может быть найдено на устройстве Settings > Device Information.
- Вы можете предоставить более конкретные идентификаторы версий, вернувшихся из текущих хэшей в gaia и gecko repositories. Это может быть сделано как так:
#!/bin/bash (cd gaia; echo "gaia $(git rev-parse HEAD)") (cd gecko; echo "gecko $(git rev-parse HEAD)")