Это руководство позволит вам впервые попробовать разработку для операционной системы 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 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/) перейдите к проекту 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 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 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.java- git checkout .
На этом лабораторная работа по разработке для платформы Android завершена.
Получить помощь
Если во время выполнения этой практической работы вы обнаружите ошибки, сообщите о них, используя ссылку «Трекер ошибок» внизу любой страницы. Вопросы отправляйте в группу Android-build .
 Введите ps -A | grep crosvm чтобы проверить, запущен ли уже crosvm . Если crossvm запущен, введите stop_cvd || true или kill crosvm , указав PID процесса.
