Это руководство позволит вам впервые попробовать разработать приложение для операционной системы 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 минут, а инкрементальная сборка 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. Последняя ветвь релиза 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 launcher.
Проверьте версию 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 завершена.
Получить помощь
Если вы столкнетесь с ошибками во время этой кодовой лаборатории, сообщите о них, используя ссылку Issue Tracker внизу любой страницы. Отправляйте вопросы в группу android-building .
Введите ps -A | grep crosvm
чтобы проверить, запущен ли уже crosvm
. Если crossvm
запущен, введите stop_cvd || true
или kill crosvm
с PID процесса.