На этой странице описывается полный процесс отправки изменения кода в Android Open Source Project (AOSP), включая порядок запроса проверки и отслеживания изменений.
AOSP использует Gerrit — веб-систему проверки кода для проектов, использующих Git.
Подпишите лицензионные соглашения с участниками
Прежде чем вносить какие-либо изменения в код для AOSP, вам необходимо прочитать лицензионные соглашения и заголовки участников и подписать одно из следующих соглашений:
- Как индивидуальный участник, вносящий вклад только от своего имени, подпишите Лицензионное соглашение индивидуального участника .
- Будучи сотрудником корпорации, убедитесь, что ваша компания подписала Лицензионное соглашение корпоративного вкладчика, разрешающее вам делать взносы от ее имени.
Начать ветку
Для каждого изменения кода, которое вы собираетесь внести, выполните следующие действия:
Начните новую ветку в соответствующем репозитории Git. Ветка не является копией исходных файлов; это указатель на определенный коммит, что делает создание локальных веток и переключение между ними легкой операцией. Используя ветки, вы можете идентифицировать изменения друг от друга. Выполните эту команду, чтобы начать ветку:
repo start BRANCH_NAME
Вы можете запустить несколько независимых веток одновременно в одном и том же репозитории. Ветка BRANCH_NAME является локальной для вашего рабочего пространства и не включена ни в Gerrit, ни в окончательное исходное дерево. Ветки также специфичны для проекта, в котором вы находитесь, поэтому, если вам нужно изменить файлы в разных проектах в рамках одного и того же изменения, вам понадобится ветка в каждом проекте, где вы изменяете файлы.
(необязательно) Убедитесь, что ветка создана:
repo status .
Вы должны увидеть вашу недавно созданную ветку. Например:
project frameworks/native/ branch mynewbranch
Внесите и протестируйте свои изменения
Чтобы внести и протестировать изменения, выполните следующие действия:
Чтобы убедиться, что вы работаете с самой актуальной кодовой базой, выполните синхронизацию всей кодовой базы:
repo sync
Если во время синхронизации возникли конфликты, обратитесь к шагам 2–4 раздела «Устранение конфликтов синхронизации» .
Найдите код для изменения. Чтобы найти код, рассмотрите возможность использования Android Code Search . Вы можете использовать Android Code Search для просмотра исходного кода AOSP в том виде, в котором он будет представлен, когда вы его фактически используете. Для получения дополнительной информации см. раздел Начало работы с Code Search . Чтобы просмотреть весь код в последней ветке выпуска AOSP в Android Code Search, перейдите по адресу
https://cs.android.com/android/platform/superproject/
.Измените или добавьте исходные файлы. Для любых внесенных изменений:
Определите, нужно ли вам использовать флаги запуска функций , и если да, реализуйте их в своем новом коде.
Следуйте рекомендациям в разделе Включение заголовков лицензий .
Для кода Java следуйте стилю кода AOSP Java для участников .
Некоторые части AOSP написаны на Kotlin (
.kt
), и вы можете использовать Kotlin в областях платформы, которые уже написаны на Kotlin. Для получения дополнительной информации о Kotlin в Android см. руководство по стилю Kotlin для разработчиков Android и руководство по взаимодействию Kotlin-Java . Для получения более подробного руководства по Kotlin см. сайт языка Kotlin .При написании API следуйте Android API Guidelines . Используйте эти руководства, чтобы увидеть контекст решений Android API. Дополнения и изменения API платформы проверяются Metalava .
Осуществите и зафиксируйте свои изменения
Коммит — это базовая единица контроля версий в Git, которая представляет собой снимок структуры каталогов и содержимого файлов для всего проекта. Чтобы зафиксировать изменения, выполните следующие действия:
По умолчанию Git регистрирует, но не отслеживает вносимые вами изменения. Чтобы указать Git отслеживать ваши изменения, вы должны пометить или подготовить эти изменения для включения в коммит. Выполните эту команду, чтобы подготовить изменение:
git add -A
Эта команда отслеживает изменения, внесенные вами в любые файлы.
Возьмите файлы из области подготовки и зафиксируйте или сохраните их в локальной базе данных:
git commit -s
По умолчанию открывается текстовый редактор и предлагается ввести сообщение о фиксации.
Предоставьте сообщение о фиксации в следующем формате:
Строка 1: Заголовок. Укажите краткое изложение изменения в одну строку (максимум 50 символов). Рассмотрите возможность использования префиксов для описания области, которую вы изменили, а затем описание изменения, которое вы сделали в этом коммите, например, следующий пример, содержащий изменение пользовательского интерфейса:
ui: Removes deprecated widget
Строка 2: Пустая строка. После заголовка следует пустая строка.
Строка 3: Текст. Укажите длинное описание, которое можно разбить на 72 символа максимум. Опишите, какую проблему решает изменение и как. Хотя текст необязателен, он полезен для других, которым нужно вернуться к изменению. Обязательно включите краткую заметку о любых предположениях или справочной информации, которая может быть важна, когда другой участник будет работать над этой функцией.
Чтобы прочитать блог о хороших описаниях коммитов (с примерами), см. Как написать сообщение о коммите в Git .
Сохраните коммит.
Уникальный идентификатор изменения, а также ваше имя и адрес электронной почты, указанные во время repo init
, автоматически добавляются в сообщение о коммите.
Загрузите изменение для проверки
После того, как вы зафиксируете изменения в своей личной истории Git, загрузите их в Gerrit:
Выполните следующую команду, чтобы загрузить все ваши коммиты во все ваши проекты:
repo upload
Все изменения во всех проектах включены в загрузку.
Вам будет предложено запустить скрипты-ловушки.
Нажмите a , а затем Enter .
Вам будет предложено одобрить загрузку:
Upload project frameworks/native/ to remote branch android16-release: branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)?
Нажмите y , а затем Enter , чтобы одобрить загрузку.
Вы должны получить сообщение, похожее на remote: SUCCESS
.
Запросить отзыв
После успешной загрузки Repo предоставляет вам ссылку на ваши изменения в Gerrit. Щелкните ссылку, чтобы просмотреть ваши изменения на сервере отзывов, добавить комментарии или запросить определенных рецензентов для вашего изменения. Все изменения в коде должны быть проверены соответствующими владельцами кода.
Чтобы запросить обзор:
В Gerrit нажмите ПРЕДЛОЖИТЬ ВЛАДЕЛЬЦЕВ :
Рисунок 1. Ссылка «Предложить владельцев» в Gerrit.
Появляется диалоговое окно рецензента. Это диалоговое окно содержит список владельцев кода, которые могут рецензировать ваши изменения.
Нажмите на владельца кода, чтобы добавить его в свой отзыв.
Кнопка ОТПРАВИТЬ активирована.
(Необязательно) Введите адрес электронной почты другого лица, которое должно просмотреть ваши изменения.
Нажмите ОТПРАВИТЬ , чтобы отправить изменение на рассмотрение.
Владельцы кода просматривают ваши изменения кода и, если они приняты, отбирают изменения и объединяют их с внутренней веткой разработки.
Определить статус изменения
Чтобы определить статус файлов в вашем изменении, проверьте наличие следующих значков рядом с файлами в изменении:
- (значок галочки): одобрено владельцем кода
- (значок крестика): не одобрено владельцем кода
- (значок часов): Ожидает одобрения владельца кода
На следующем рисунке показаны значки статуса, применяемые к файлам при изменении:
Рисунок 2. Пример файлов со значками, показывающими одобрение владельца кода.
Устраните неполадку и загрузите заменяющее изменение
Если рецензент запросит изменение вашего обновления, вы можете изменить свой коммит в Git, что приведет к созданию нового набора исправлений для того же изменения.
Чтобы разрешить обратную связь и внести изменения:
Выполните шаги 2–4 в разделе Внесение и тестирование изменений .
Чтобы внести изменения, выполните следующие команды:
git add -A git commit --amend
Когда вы загружаете исправленное изменение, оно заменяет оригинал как в Gerrit, так и в вашей локальной истории Git.
Устранение конфликтов синхронизации
Если в исходное дерево внесены другие изменения, которые конфликтуют с вашими, вы получите сообщение о наличии конфликтов. Чтобы разрешить конфликты:
Убедитесь, что вы работаете с самой последней версией кода:
repo sync .
Команда
repo sync
извлекает обновления с исходного сервера, а затем пытается автоматически перебазировать вашHEAD
на новый удаленныйHEAD
.Если автоматическое перемещение не удалось, выполните ручное перемещение:
repo rebase .
Разрешение конфликтов слияния. Если у вас нет предпочтительного метода разрешения конфликтов слияния, вы можете использовать
git mergetool
для ручного исправления конфликтов между файлами.После успешного исправления конфликтующих файлов выполните следующую команду, чтобы применить новые коммиты:
git rebase --continue
Отправить изменение
После того, как отправленное изменение прошло процесс проверки и верификации, владелец кода отправляет его вам либо в ветку, где было проверено изменение, либо во внутреннюю ветку.
После объединения ваших заявок вы можете посетить панель управления Android Continuous Integration, чтобы отслеживать, как ваши заявки интегрируются в дерево.