Этот учебный материал позволит вам впервые попробовать себя в разработке под операционной системой Android.
Настройка для разработки под Android
Прежде чем загружать и собирать ветку манифеста android-latest-release из исходного кода 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 минут, а инкрементальная сборка — всего несколько минут. Для сравнения, на 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.
Установить репозиторий
Для установки репозитория выполните следующие действия:
Загрузите актуальную информацию о пакете:
sudo apt-get updateДля установки средства запуска репозитория выполните следующую команду:
sudo apt-get install repoПрограмма запуска репозитория предоставляет скрипт на Python, который инициализирует процесс извлечения данных и загружает полный набор инструментов репозитория.
В случае успеха перейдите к шагу 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 (
android-latest-release):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestВведите или подтвердите свои учетные данные Git (имя, адрес электронной почты).
Синхронизируйте исходный код:
repo sync -c -j8Если у вас возникнут проблемы во время загрузки, обратитесь к разделу «Устранение неполадок и исправление проблем с синхронизацией» .
Скомпилируйте код
Для сборки кода:
В рабочей директории выполните команду `source
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.Запуск Cuttlefish:
launch_cvd --daemonПодключитесь к устройству Cuttlefish, перейдя по адресу
https://localhost:8443в вашем веб-браузере. Отобразится ваше виртуальное устройство на базе Android.
Внесите изменения
Обновите исходный код, следуя этому примеру в списке изменений .
Из корневой директории вашей папки с загруженными файлами (каталог
aosp/) перейдите в Git-проектframeworks/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 android17-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/android17-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 .
Введите команду ps -A | grep crosvm чтобы проверить, запущен ли уже crosvm . Если crossvm запущен, введите stop_cvd || true или kill crosvm , указав его PID.