Вы можете помочь разработать самую распространенную операционную систему в истории Земли. Да, вы здесь, чтобы начать путь становления инженером платформы Android.
Хотя путь непрост, команда Android стремится упростить ваш путь с каждым выпуском. И команда каждый день вносит улучшения посредством непосредственной работы в проекте Android Open Source Project (AOSP).
Так что расслабьтесь, включите терминал и давайте творить историю.
Цели
Миссия этой кодовой лаборатории двоякая:
- Чтобы дать вам небольшое представление о том, как выглядит рабочий процесс разработчиков Android, работающих над платформой (операционной системой).
- Поощряйте вас оставлять отзывы об инструментах Android, документации и рабочем процессе разработчиков.
Предварительные условия
Список требований для этой кодовой лаборатории взят из требований для разработки общей платформы ( AOSP ). Чтобы воспользоваться этой лабораторией кода, настройте следующее:
- Физическая рабочая станция Linux, отвечающая всем общедоступным требованиям .
- Repo и конфигурация 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
Первоначальная синхронизация может занять час или больше.
Каждая проверка репо представлена файлом манифеста . Допустимо иметь более одной проверки репо одновременно, если они существуют в разных каталогах. Но учтите, что каждая проверка и сборка занимают примерно 300 ГБ (и эта цифра растет), поэтому либо ограничьте себя двумя извлечениями репо, либо дополните свою систему дополнительным диском.
Создайте код
Чтобы собрать Android, вы должны выбрать тип целевого устройства для сборки с помощью команды lunch
. Целью является вариант устройства, например конкретная модель или форм-фактор.
Целевое устройство aosp_cf_x86_64_phone-userdebug
позволяет вам создать виртуальное Android-устройство Cuttlefish для тестирования без физического устройства.
Вместо этого, чтобы собрать и обновить физическое устройство, выберите другое устройство и следуйте инструкциям по перепрошивке устройств .
Настройте среду для создания устройств Android, выполнив следующую команду из корня извлечения исходного кода:
source build/envsetup.sh
Передайте цель сборки команде обеда, например:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Создайте код из любой точки оформления заказа с помощью:
m
Ожидайте, что первая сборка займет несколько часов. Последующие сборки занимают значительно меньше времени.
Запустить каракатицу
Cuttlefish — это эмулятор Android, используемый для тестирования ваших сборок.
Если вы никогда не устанавливали Cuttlefish, вам необходимо установить необходимые зависимости Cuttlefish. В окне терминала выполните следующие команды для загрузки, сборки и установки хост-пакетов Debian:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
Перезагрузка запускает установку дополнительных модулей ядра и применяет правила
udev
.Запускаем каракатицу:
launch_cvd --daemon
Подключитесь к устройству Cuttlefish, перейдя по адресу
https://localhost:8443
в веб-браузере. Вас приветствует видеопоток только что созданного вами устройства на базе Android.
Внести изменения
Обновите исходный код, следуя этому примеру списка изменений .
Из корня вашего оформления заказа (каталог
aosp/
) перейдите к проектуframeworks/native
Git:cd frameworks/native
Запустите временный проект с помощью этой команды:
repo start <some-name> .
Отредактируйте
SurfaceFlinger.cpp
, включив в него обновления из списка изменений в следующем месте:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Найдите эту строку:
void SurfaceFlinger::updateColorMatrixLocked() {
Добавьте эти две строки в начало updateColorMatrixLocked():
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});
Создайте код:
m
Обновите сборку на устройстве:
adb root
adb remount
adb sync
adb reboot
Убедитесь, что вы видите изменение цвета на выбранном устройстве, подобное тому, что показано на рисунке 1.
Рисунок 1. Внешний вид экрана после успешного изменения цвета
Проверьте свой код
В этой части лаборатории кода используется пример теста, который находится в дереве исходного кода и не пройден. При этом используется Atest для локального запуска теста и тестирования кода.
Чтобы использовать тест, следуйте этим инструкциям:
Бегать:
atest DevCodelabTest
Тест провалится. Изучите трассировку стека неудачного теста:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
Тогда посмотри сюда
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
проект, запустите эти команды, чтобы загрузить их: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 main:
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/main
Просмотрите изменения в Gerrit
Перейдите по ссылке, напечатанной в терминале, которая похожа на эту:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
На этом стартовая лаборатория разработки кода для платформы Android завершена. Дальнейшие действия см. в разделе «Отправка исправлений» , а полную информацию о разработке Android см. в остальной части этого сайта.
Отменить изменения
Обычно после тестирования, проверки и утверждения вы отправляете изменения в Gerrit и объединяете их в репозиторий.
Вместо этого для целей этой кодовой лаборатории верните список изменений, нажав «Отменить» в Gerrit.
Затем закройте связанную временную ветку в каталоге frameworks/native
project (или его подкаталогах):
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 .
На этом этапе все готово! Хорошая работа!
Получить помощь
Если вы обнаружите ошибки во время выполнения этой лаборатории, сообщите о них, используя ссылку «Отслеживание проблем» внизу любой страницы. Присылайте вопросы в группу разработчиков Android .