Это руководство позволит вам впервые попробовать разработку для операционной системы 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/
) перейдите к проекту Gitframeworks/native
: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 android16-release: 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/android16-release
Посмотрите ваши изменения в Gerrit
Чтобы просмотреть изменения в Gerrit, перейдите по ссылке, выведенной в терминале. Ссылка выглядит примерно так:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Отменить изменения
Обычно после тестирования, проверки и одобрения вы отправляете изменения в Gerrit и объединяете их с репозиторием. Вместо этого, для целей этой практической работы, верните свою работу:
В Gerrit нажмите кнопку Отменить .
Откажитесь от связанной временной ветки в каталоге проекта
frameworks/native
(или его подкаталогах):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-build .
Введите ps -A | grep crosvm
чтобы проверить, запущен ли уже crosvm
. Если crossvm
запущен, введите stop_cvd || true
или kill crosvm
, указав PID процесса.