Это руководство позволит вам впервые попробовать разработку операционной системы Android.
Настройка для разработки под Android
Прежде чем загружать и собирать main
ветку исходного кода Android, убедитесь, что ваше оборудование соответствует необходимым требованиям и необходимое программное обеспечение установлено правильно. Вы также должны быть знакомы со следующими терминами:
- Гит
- Git — бесплатная распределенная система контроля версий с открытым исходным кодом. Android использует Git для локальных операций, таких как ветвления, фиксации, различия и редактирование. За помощью в изучении Git обратитесь к документации Git .
- Репо
- Repo — это оболочка Python вокруг Git, которая упрощает выполнение сложных операций в нескольких репозиториях Git. Repo не заменяет Git для всех операций контроля версий, он лишь упрощает выполнение сложных операций Git. Repo использует файлы манифеста для объединения проектов Git в суперпроект Android.
- файл манифеста
- Файл манифеста — это XML-файл, определяющий расположение различных проектов Git в исходном коде Android в дереве исходного кода AOSP.
Соответствие требованиям к оборудованию
Ваша рабочая станция разработки должна соответствовать или превосходить следующие требования к оборудованию:
64-битная система x86.
Не менее 400 ГБ свободного дискового пространства для извлечения и сборки кода (250 ГБ для извлечения + 150 ГБ для сборки).
Минимум 64 ГБ оперативной памяти. Google использует 72-ядерные машины с 64 ГБ оперативной памяти для создания Android. При такой конфигурации оборудования полная сборка Android занимает около 40 минут, а инкрементная сборка Android — всего несколько минут. Напротив, полная сборка на 6-ядерном компьютере с 64 ГБ ОЗУ занимает около 6 часов.
Соответствовать требованиям операционной системы
На вашей рабочей станции разработки должен работать любой 64-битный дистрибутив Linux с библиотекой GNU C (glibc) 2.17 или новее.
Установите необходимые пакеты
Чтобы установить необходимые пакеты для Ubuntu 18.04 или новее, выполните следующую команду:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
Установите необходимое программное обеспечение
Прежде чем вы сможете работать с AOSP, у вас должны быть установлены OpenJDK, Make, Python 3 и Repo. Основная ветка AOSP Android поставляется с готовыми версиями OpenJDK, Make и Python 3, поэтому дополнительных действий по установке не требуется. В следующем разделе объясняется, как установить Repo.
Установить репо
Выполните следующие действия, чтобы установить Repo:
Загрузите текущую информацию о пакете:
sudo apt-get update
Запустите следующую команду, чтобы установить программу запуска Repo:
sudo apt-get install repo
Средство запуска Repo предоставляет скрипт Python, который инициализирует оформление заказа и загружает полный инструмент Repo.
В случае успеха перейдите к шагу 4.
(необязательно) Установите Repo вручную, используя следующую серию команд:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
Первые три команды создают временный файл, загружают в него репо и проверяют, соответствует ли предоставленный ключ требуемому ключу. Если эти команды выполнены успешно, последняя команда устанавливает средство запуска Repo.
Проверьте версию программы запуска Repo:
repo version
В выводе должна быть указана версия 2.4 или выше, например:
repo launcher version 2.45
Загрузите исходный код Android
Исходный код Android находится в коллекции репозиториев Git, размещенных в Google. Каждый репозиторий Git включает всю историю исходного кода Android, включая изменения в исходном коде и время внесения изменений. Чтобы загрузить исходный код Android:
Перейдите в свой домашний каталог:
cd ~
Создайте в нем локальный рабочий подкаталог:
mkdir aosp
Перейдите в каталог:
cd aosp
Инициализируйте основную ветку исходного кода репозитория AOSP (по умолчанию):
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
Введите или примите свои учетные данные Git (имя, адрес электронной почты).
Синхронизируйте исходный код:
repo sync -c -j8
Если у вас возникли проблемы во время загрузки, обратитесь к разделу «Устранение неполадок и устранение проблем с синхронизацией» .
Создайте код
Чтобы построить код:
Из рабочего каталога создайте сценарий
envsetup.sh
для настройки среды сборки:source build/envsetup.sh
Укажите тип целевого устройства для сборки с помощью команды
lunch
. Целью является вариант устройства, например конкретная модель или форм-фактор. Укажите эту цель:lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Вы должны увидеть краткий обзор вашей целевой среды и среды сборки:
============================================ PLATFORM_VERSION_CODENAME=VanillaIceCream PLATFORM_VERSION=VanillaIceCream PRODUCT_INCLUDE_TAGS=com.android.mainline TARGET_PRODUCT=aosp_arm TARGET_BUILD_VARIANT=eng TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a-neon TARGET_CPU_VARIANT=generic HOST_OS=linux HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=AOSP.MAIN OUT_DIR=out ============================================
Постройте цель:
m
Ожидайте, что первая сборка займет несколько часов. Последующие сборки занимают значительно меньше времени. Результат вашей сборки появится в $OUT_DIR
.
Запустить каракатицу
Cuttlefish — это эмулятор Android, используемый для тестирования ваших сборок.
Выполните следующие команды, чтобы загрузить, собрать и установить хост-пакеты 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 -R
adb root
adb sync
adb reboot
Убедитесь, что вы видите изменение цвета на выбранном устройстве, подобное тому, что показано на рисунке 1.
Рисунок 1. Внешний вид экрана после успешного изменения цвета
Исправить тест
В этой части лаборатории кода используется пример теста, который находится в дереве исходного кода и не пройден.
Чтобы запустить, отладить и исправить тест, следуйте этим инструкциям:
Бегать:
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)
Последняя строка трассировки стека показывает тест, который не прошёл (
testHelloWorld
). Этот тест находится в файлеDevCodelabTest.java
.Чтобы определить расположение теста, который нужно исправить, добавьте
WORKING_DIRECTORY /platform_testing/tests/example/devcodelab/src/
к последней строке трассировки стека до имени тестового файла включительно. Итак,android.test.example.devcodelab.DevCodelabTest
становитсяWORKING_DIRECTORY /platform_testing/tests/example/devcodelab/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 используйте веб-систему проверки кода 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
Чтобы просмотреть изменения в Gerrit, перейдите к выводу ссылки в терминале. Ссылка аналогична следующей:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Отменить изменения
Обычно после тестирования, проверки и утверждения вы отправляете изменения в 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 завершена.
Получить помощь
Если вы обнаружите ошибки во время этой лаборатории, сообщите о них, используя ссылку «Отслеживание проблем» внизу любой страницы. Присылайте вопросы в группу разработчиков Android .
Тип ps -A | grep crosvm
, чтобы узнать, запущен ли уже crosvm
. Если crossvm
запущен, введите stop_cvd || true
или kill crosvm
с помощью PID процесса.