Это руководство позволит вам впервые попробовать разработку для операционной системы Android.
Настройка для разработки под Android
Прежде чем загружать и собирать ветку манифеста android-latest-release из исходного кода Android, убедитесь, что ваше оборудование соответствует необходимым требованиям , а необходимое программное обеспечение установлено правильно. Вам также следует ознакомиться со следующими терминами:
- Гит
- Git — это бесплатная распределённая система управления версиями с открытым исходным кодом. Android использует Git для локальных операций, таких как ветвление, коммиты, сравнение и редактирование. За информацией по освоению Git обратитесь к документации Git .
- Репо
- Repo — это Python-обёртка для Git, упрощающая выполнение сложных операций с несколькими репозиториями Git. Repo не заменяет Git для всех операций с контролем версий, а лишь упрощает выполнение сложных операций с Git. Repo использует файлы манифестов для объединения проектов Git в суперпроект Android.
- файл манифеста
- Файл манифеста — это XML-файл, в котором указано, где в дереве исходного кода AOSP размещаются различные проекты Git в исходном коде Android.
Соответствие требованиям к оборудованию
Ваша рабочая станция разработки должна соответствовать или превосходить следующие аппаратные требования:
64-битная система x86.
Не менее 400 ГБ свободного места на диске для проверки и сборки кода (250 ГБ для проверки + 150 ГБ для сборки).
Минимум 64 ГБ оперативной памяти. Google использует 72-ядерные процессоры с 64 ГБ оперативной памяти для сборки Android. При такой конфигурации оборудования полная сборка Android занимает около 40 минут, а инкрементальная — всего несколько минут. Для сравнения, на 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. Последняя версия Android содержит готовые версии OpenJDK, Make и Python 3, поэтому дополнительная установка не требуется. В следующем разделе объясняется, как установить Repo.
Установить репозиторий
Для установки Repo выполните следующие действия:
Загрузите актуальную информацию о пакете:
sudo apt-get updateВыполните следующую команду для установки Repo launcher:
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 launcher:
repo versionВ выводе должна быть указана версия 2.4 или выше, например:
repo launcher version 2.45
Загрузить исходный код Android
Исходный код Android находится в коллекции Git-репозиториев, поддерживаемых Google. Каждый Git-репозиторий содержит полную историю исходного кода Android, включая изменения и время их внесения. Чтобы скачать исходный код Android:
Перейдите в свой домашний каталог:
cd ~Создайте внутри него локальный рабочий подкаталог:
mkdir aospПерейдите в каталог:
cd aospИнициализируйте последнюю ветку выпуска исходного кода репозитория AOSP (
android-latest-release):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestВведите или примите свои учетные данные Git (имя, адрес электронной почты).
Синхронизируем исходный код:
repo sync -c -j8Если у вас возникли проблемы во время загрузки, обратитесь к разделу Устранение неполадок и исправление проблем синхронизации .
Создайте код
Чтобы построить код:
Из своего рабочего каталога запустите скрипт
envsetup.shдля настройки среды сборки:source build/envsetup.shУкажите тип целевого устройства для сборки с помощью команды
lunch. Цель — это набор устройств, например, определённая модель или форм-фактор. Укажите эту цель:lunch aosp_cf_x86_64_only_phone-aosp_current-userdebugВы должны увидеть краткий обзор вашей целевой среды и среды сборки:
============================================ PLATFORM_VERSION_CODENAME=Baklava PLATFORM_VERSION=Baklava TARGET_PRODUCT=aosp_cf_x86_64_only_phone TARGET_BUILD_VARIANT=userdebug TARGET_ARCH=x86_64 TARGET_ARCH_VARIANT=silvermont HOST_OS=linux HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=BP1A.250305.020 OUT_DIR=out ============================================Постройте цель:
m
Ожидайте, что первая сборка займёт несколько часов. Последующие сборки займут значительно меньше времени. Результат сборки отображается в $OUT_DIR .
Запуск каракатицы
Cuttlefish — эмулятор Android, используемый для тестирования ваших сборок.
Выполните следующие команды для загрузки, сборки и установки пакетов Debian хоста:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootПерезагрузка запускает установку дополнительных модулей ядра и применяет правила
udev.Запуск каракатицы:
launch_cvd --daemonПодключитесь к устройству Cuttlefish, перейдя в веб-браузере по адресу
https://localhost:8443. Отобразится ваше виртуальное устройство на базе Android.
Внести изменения
Обновите исходный код, следуя этому примеру списка изменений .
Из корня вашей контрольной папки (каталог
aosp/) перейдите к проекту Gitframeworks/native:cd frameworks/nativeЗапустите временный проект с помощью этой команды:
repo start PROJECT_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 rootadb remount -Radb rootadb syncadb 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/nativerepo start PROJECT_NAME.git add .git commitВ качестве сообщения о фиксации введите следующее:
Android PROJECT_NAME. change Test: manual atestЗагрузите ваши изменения:
repo uploadЕсли все прошло успешно, вы увидите сообщение, похожее на это:
Upload project frameworks/native/ to remote branch android16-release: branch PROJECT_NAME. ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android PROJECT_NAME. 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 PROJECT_NAME. change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] PROJECT_NAME. -> refs/for/android16-release
Посмотрите ваши изменения в Gerrit
Чтобы просмотреть изменения в Gerrit, перейдите по ссылке, выведенной в терминале. Ссылка выглядит примерно так:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Отменить изменения
Обычно после тестирования, проверки и одобрения вы отправляете изменения в Gerrit и объединяете их с репозиторием. Вместо этого, для целей этой практической работы, верните свою работу:
В Gerrit нажмите кнопку Отменить .
Откажитесь от связанной временной ветки в каталоге проекта
frameworks/native(или его подкаталогах):repo abandon PROJECT_NAME.Отмените изменения, внесённые в тестовый файл. Поскольку вы не выполнили
repo start,git commitиrepo uploadдля тестового изменения, вы можете сбросить сам файл. Если вы находитесь вaosp/platform_testing directory, используйте следующую команду для сброса файла:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
На этом лабораторная работа по разработке для платформы Android завершена.
Получить помощь
Если во время выполнения этой практической работы вы обнаружите ошибки, сообщите о них, используя ссылку «Трекер ошибок» внизу любой страницы. Вопросы отправляйте в группу Android-build .
Введите ps -A | grep crosvm чтобы проверить, запущен ли уже crosvm . Если crossvm запущен, введите stop_cvd || true или kill crosvm , указав PID процесса.