Вы можете помочь разработать самую широко устанавливаемую операционную систему в истории Земли. Да, вы здесь, чтобы стать инженером платформы Android.
Несмотря на то, что путь сложен, команда Android стремится упростить ваше путешествие с каждым выпуском. И команда каждый день вносит улучшения благодаря непосредственной работе в Android Open Source Project (AOSP).
Так что расслабьтесь, запустите терминал и давайте творить историю.
Цели
Миссия этой кодлабы двояка:
- Чтобы дать вам небольшое представление о том, на что похож рабочий процесс разработчиков Android, работающих над платформой (операционной системой).
- Поощряйте вас оставлять отзывы об инструментах Android, документации и рабочем процессе разработчиков.
Предпосылки
Список требований для этой кодлабы основан на требованиях для разработки на общей платформе ( AOSP ). Чтобы воспользоваться этой кодовой лабораторией, настройте следующее:
- Физическая рабочая станция Linux, отвечающая всем общедоступным требованиям .
- Репозиторий и конфигурация Git, необходимые для редактирования базы кода Android.
Окружающая среда
Как правило, пользователи строят и разрабатывают непосредственно на рабочей станции. Поскольку вы можете работать в разных терминалах, а многие из используемых команд специфичны для терминала, вам нужно будет повторно запускать их в каждом сеансе терминала. В частности, к ним относятся source build/envsetup.sh
и команды lunch
.
Настроить рабочую станцию
- Установите необходимые пакеты на рабочую станцию.
- Находясь в терминале, установите Repo и получите учетные данные для всех репозиториев Git.
Инициализировать и синхронизировать код
Перейдите в свой домашний каталог:
cd ~
Создайте в нем локальный рабочий подкаталог:
mkdir aosp
Перейдите в каталог:
cd aosp
Инициализируйте основную ветку исходного кода репозитория AOSP (по умолчанию):
repo init -u https://android.googlesource.com/platform/manifest
Введите или примите свои учетные данные Git (имя, адрес электронной почты).
Синхронизируйте исходный код:
repo sync -j8
Первоначальная синхронизация может занять час или больше.
Каждая проверка репо представлена файлом манифеста . Разрешено иметь более 1 проверки репо одновременно, если они существуют в разных каталогах. Но обратите внимание, что каждая проверка и сборка занимают примерно 300 ГБ (и растут), поэтому либо ограничьтесь двумя проверками репо, либо дополните свою систему дополнительным диском.
Создайте код
Чтобы собрать Android, вы должны выбрать тип целевого устройства для сборки с помощью команды lunch
. Цель — это перестановка устройства, например конкретная модель или форм-фактор.
Приведенное ниже целевое устройство aosp_cf_x86_64_phone-userdebug
позволяет создать виртуальное Android-устройство Cuttlefish для тестирования без физического устройства.
Чтобы вместо этого создать и обновить физическое устройство, выберите другую цель и следуйте инструкциям по перепрошивке устройств .
Настройте среду для сборки устройств Android, выполнив следующую команду из корня проверки исходного кода:
source build/envsetup.sh
Передайте цель сборки команде обеда, например:
lunch aosp_cf_x86_64_phone-userdebug
Создавайте код из любого места на кассе с помощью:
m
Ожидайте, что первая сборка займет несколько часов. Последующие сборки занимают значительно меньше времени.
Создайте экземпляр Acloud
Acloud — это инструмент командной строки в AOSP, который помогает пользователям создавать виртуальные устройства Android, в данном случае Cuttlefish.
Если вы находитесь в том же сеансе терминала, который использовался для создания кода , продолжайте. В противном случае повторно запустите сценарий envsetup.sh
и ту же команду lunch
, которую вы использовали раньше. затем
Создайте локальный экземпляр Acloud с помощью:
acloud create --local-image --local-instance
Примите обновления для необходимых пакетов.
При появлении запроса перезагрузите рабочую станцию, чтобы все изменения вступили в силу.
Выберите устройство «Каракатица».
Вас должен приветствовать сеанс VNC, содержащий устройство Android!
Вы можете взаимодействовать с виртуальным устройством на рабочей станции с помощью мыши и клавиатуры. Вы также можете следить за действиями в журналах во время использования вашего устройства, используя команду logcat
Android Debug Bridge (adb):
adb logcat
Изменить
Обновите исходный код, следуя этому примеру списка изменений .
В корневом каталоге оформления заказа (
aosp/
) перейдите к проектуframeworks/native
Git:cd frameworks/native
Запустите временный проект с помощью этой команды:
repo start <some-name> .
Отредактируйте
SurfaceFlinger.cpp
, чтобы включить обновления из списка изменений в следующем месте:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Найдите эти две строки:
postFrame(); postComposition();
Замените эти две строки на следующие:
postFrame(); postComposition(); mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f}); updateColorMatrixLocked();
Соберите код:
m
Обновите сборку на устройстве:
adb root
adb remount
adb sync
adb reboot
acloud reconnect
Если вам будет предложено выбрать устройство, выберите то, которое показывает наименьшее прошедшее время. (Возможно, это последнее в списке, который вы видите.) Чтобы просмотреть все экземпляры виртуальных устройств, используйте команды
acloud list
иacloud list -v
.
Убедитесь, что вы видите изменение цвета на выбранном устройстве, как показано на рисунке 1.
Рисунок 1. Внешний вид экрана после успешного изменения цвета
Протестируйте свой код
В этой части лаборатории кодов используется пример теста, который находится в дереве исходного кода и не работает. Это использует Atest для локального запуска теста и тестирования кода.
Чтобы использовать тест, следуйте этим инструкциям:
Бежать:
atest DevCodelabTest
Тест провалится. Чтобы исправить это, найдите исходный код неудавшегося теста:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
Тогда смотри сюда
platform_testing/tests/example/devcodelab
Чтобы получить файл для редактирования, возьмите имя теста в
android.test.example.devcodelab.DevCodelabTest
и замените расширение.
с/
, чтобы получить этот результат:src/android/test/example/devcodelab/DevCodelabTest.java
Затем отредактируйте
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
заменить
Assert.assertTrue(false)
с
Assert.assertTrue(true)
Запустите тест еще раз, чтобы убедиться, что вы устранили проблему:
atest DevCodelabTest
Загрузите свой код для проверки
Repo упрощает использование Git, объединяя такие команды, как git clone
, для одновременной работы с несколькими репозиториями (или проектами) Git.
См. Инструменты контроля версий для обзора Git и Repo со ссылками на полную документацию по работе с исходным кодом Android. Полный список проектов Git и отдельные проекты (пути) для веток, связанных с каждым проектом, см. в репозитории AOSP .
Для проверки кода ваших проектов в Git вы будете использовать веб-систему проверки кода Gerrit .
Предполагая, что вы внесли свои изменения в
frameworks/native
project, запустите эти команды, чтобы загрузить их:cd frameworks/native
repo start codelab .
git add .
git commit
В качестве сообщения о коммите введите следующее:
Android codelab change Test: manual atest
Загрузите ваше изменение:
repo upload
В случае успеха вы увидите сообщение, похожее на это:
Upload project frameworks/native/ to remote branch master:
branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
ff46b36d android codelab change
to https://android-review.googlesource.com/ (y/N)? y
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
remote:
To https://android-review.googlesource.com/platform/frameworks/native
* [new branch] codelab -> refs/for/master
Просмотр изменений в Gerrit
Перейдите по ссылке, напечатанной в терминале, похожей на эту:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Это завершает начальную лабораторию кода для разработки платформы Android. Дальнейшие действия см. в разделе Отправка исправлений , а подробные сведения о разработке Android см. в остальной части этого сайта.
Отменить изменение
Обычно после тестирования и после проверки и утверждения вы отправляете свои изменения в Gerrit и объединяете их с репозиторием.
Вместо этого, для целей этой кодовой лаборатории, верните свой список изменений, щелкнув « Отказаться » в Gerrit.
Затем откажитесь от связанной временной ветки в каталоге frameworks/native
проекта (или его подкаталогах):
repo abandon codelab .
Не забудьте также отменить изменения, внесенные в тестовый файл. Поскольку вы не repo start
, git commit
и не repo upload
изменения в репозиторий, вы можете сбросить сам файл. Предполагая, что вы находитесь в aosp/platform_testing directory
, используйте следующее для сброса файла:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
На этом все готово! Хорошо сделано!
Получить помощь
Если вы столкнулись с ошибками во время этой лаборатории кода, сообщите о них, используя ссылку системы отслеживания ошибок в нижней части любой страницы. Присылайте вопросы в группу по сборке андроида .