На этой странице описан полный процесс отправки патча в Android Open Source Project (AOSP), включая просмотр и отслеживание изменений с помощью Gerrit .
Предпосылки
Прежде чем следовать инструкциям на этой странице, вам необходимо инициализировать среду сборки , загрузить исходный код , создать пароль и следовать инструкциям на странице генератора паролей .
Дополнительные сведения о Repo и Git см. В разделе Разработка .
Для получения информации о различных ролях, которые вы можете играть в сообществе Android Open Source, см. Роли проекта .
Если вы планируете добавить код для платформы Android, прочтите информацию о лицензировании AOSP .
Обратите внимание, что изменения в некоторых из вышестоящих проектов, используемых Android, следует вносить непосредственно в этот проект, как описано в разделе «Восходящие проекты» .
Для авторов
Аутентификация на сервере
Прежде чем вы сможете загрузить в Gerrit, вам необходимо установить пароль, который идентифицирует вас с сервером. Следуйте инструкциям на странице генератора паролей. Сделать это нужно только один раз. Дополнительные сведения см. В разделе Использование проверки подлинности .
Открытие репо-филиала
Для каждого изменения, которое вы собираетесь внести, запускайте новую ветку в соответствующем репозитории Git:
repo start NAME .
Вы можете запустить несколько независимых веток одновременно в одном репозитории. NAME
ветви является локальной для вашей рабочей области и не включена в Gerrit или в окончательное дерево исходных текстов.
Внесение изменений
После того, как вы изменили исходные файлы (и проверили их, пожалуйста), зафиксируйте изменения в своем локальном репозитории:
git add -A
git commit -s
Предоставьте подробное описание изменения в сообщении о фиксации. Это описание помещается в общедоступный репозиторий AOSP, поэтому следуйте этим рекомендациям для написания описаний списков изменений:
Начните с однострочного резюме (максимум 50 символов), за которым следует пустая строка. Этот формат используется Git и Gerrit для различных дисплеев.
Начиная с третьей строки, введите более длинное описание, которое должно содержать не более 72 символов. Опишите, какую проблему решает изменение и как оно решает. Вторая часть является необязательной при реализации новых функций, хотя и желательна.
Включите краткое примечание любых предположений или справочной информации, которые могут быть важны, когда другой участник работает над этой функцией.
Вот пример сообщения фиксации:
Short description on first line More detailed description of your patch, which is likely to take up multiple lines.
Уникальный идентификатор изменения, а также ваше имя и адрес электронной почты, указанные во время repo init
, автоматически добавляются в ваше сообщение фиксации.
Загрузка в Геррит
После того, как вы зафиксируете изменение в своей личной истории, загрузите его в Gerrit с помощью
repo upload
Если вы запустили несколько веток в одном репозитории, вам будет предложено выбрать, какие из них выгрузить.
После успешной загрузки Repo предоставит вам URL-адрес новой страницы на Gerrit . Перейдите по этой ссылке, чтобы просмотреть свой патч на сервере рецензирования, добавить комментарии или запросить конкретных рецензентов для вашего патча.
Загрузка патча на замену
Предположим, рецензент просмотрел ваш патч и запросил небольшую модификацию. Вы можете изменить свой коммит в Git, что приведет к новому патчу на Gerrit с тем же идентификатором изменения, что и исходный.
git add -A
git commit --amend
Когда вы загружаете исправленный патч, он заменяет оригинал в Gerrit и в вашей локальной истории Git.
Разрешение конфликтов синхронизации
Если в дерево исходных текстов отправлены другие патчи, которые конфликтуют с вашим, вам необходимо переустановить свой патч поверх новой HEAD
исходного репозитория. Самый простой способ сделать это - запустить
repo sync
Эта команда сначала получает обновления с исходного сервера, а затем пытается автоматически переустановить ваш HEAD
на новый удаленный HEAD
.
Если автоматическая переустановка не удалась, выполните перебазирование вручную.
repo rebase
Использование git mergetool
может помочь вам справиться с конфликтом перебазирования. Когда вы успешно объединили конфликтующие файлы, запустите:
git rebase --continue
После завершения автоматической или ручной перебазировки запустите repo upload
чтобы отправить исправление с измененной базой.
После утверждения заявки
После того, как отправка проходит процесс проверки и проверки, Gerrit автоматически добавляет изменение в общедоступный репозиторий. Другие пользователи могут запустить repo sync
чтобы загрузить обновление в свой локальный клиент.
Upstream проекты
Android использует ряд других проектов с открытым исходным кодом, таких как ядро Linux и WebKit, как описано в разделе Управление программным обеспечением Android . Для большинства проектов в разделе external/
внесите изменения вверх по течению, а затем проинформируйте разработчиков Android о новом выпуске апстрима, содержащем эти изменения. Также может быть полезно загружать патчи, которые побуждают нас отслеживать новую версию апстрима, хотя это может быть сложно внести, если проект широко используется в Android, как и большинство более крупных, упомянутых ниже, где мы, как правило, обновляем с каждым выпуск.
Один интересный частный случай - Bionic. Большая часть кода взята из BSD, поэтому, если изменение не касается кода, нового для Bionic, мы бы предпочли исправление восходящего потока, а затем извлечение нового файла из соответствующей BSD.
ICU4C
Внесите все изменения в проект ICU4C по адресу external/icu4c
на домашней странице ICU-TC . Дополнительные сведения см. В разделе « Отправка ошибок ICU и запросов на добавление функций» .
LLVM / Clang / Компилятор-RT
Внесите все изменения в проекты, связанные с LLVM ( external/clang
, external/compiler-rt
, external/llvm
) на странице инфраструктуры компилятора LLVM .
мкш
Внесите все изменения в проект MirBSD Korn Shell на external/mksh
, отправив электронное письмо на miros-mksh
в домене mirbsd.org
(для отправки туда подписка не требуется) или на Launchpad .
OpenSSL
Внесите все изменения в проект OpenSSL на странице external/openssl
на странице OpenSSL .
V8
Отправляйте все изменения в проект V8 по адресу external/v8
на странице выпуска V8 . Подробнее см. Содействие в V8 .
WebKit
Внесите все изменения в проект WebKit на странице external/webkit
на странице WebKit . Начните процесс с регистрации ошибки WebKit . В случае ошибки используйте Android
в полях « Платформа» и « ОС», только если ошибка специфична для Android. Ошибки с гораздо большей вероятностью привлекут внимание рецензентов после добавления предлагаемого исправления и включения тестов. Подробнее см. Добавление кода в WebKit .
zlib
Внесите все изменения в проект zlib по адресу external/zlib
на домашней странице zlib .