Попробуйте разработку для Android

Это руководство позволит вам впервые попробовать разработку операционной системы Android.

Настройка для разработки под Android

Прежде чем загружать и собирать main ветку исходного кода 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. Основная ветка AOSP Android поставляется с готовыми версиями OpenJDK, Make и Python 3, поэтому дополнительных действий по установке не требуется. В следующем разделе объясняется, как установить Repo.

Установить репо

Выполните следующие действия, чтобы установить Repo:

  1. Загрузите текущую информацию о пакете:

    sudo apt-get update
  2. Запустите следующую команду, чтобы установить программу запуска Repo:

    sudo apt-get install repo

    Средство запуска Repo предоставляет скрипт Python, который инициализирует оформление заказа и загружает полный инструмент Repo.

    В случае успеха перейдите к шагу 4.

  3. (необязательно) Установите 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.

  4. Проверьте версию программы запуска Repo:

    repo version

    В выводе должна быть указана версия 2.4 или выше, например:

    repo launcher version 2.45

Загрузите исходный код Android

Исходный код Android находится в коллекции репозиториев Git, размещенных в Google. Каждый репозиторий Git включает всю историю исходного кода Android, включая изменения в исходном коде и время внесения изменений. Чтобы загрузить исходный код Android:

  1. Перейдите в свой домашний каталог:

    cd ~
  2. Создайте в нем локальный рабочий подкаталог:

    mkdir aosp
  3. Перейдите в каталог:

    cd aosp
  4. Инициализируйте основную ветку исходного кода репозитория AOSP (по умолчанию):

    repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
  5. Введите или примите свои учетные данные Git (имя, адрес электронной почты).

  6. Синхронизируйте исходный код:

    repo sync -c -j8

    Если у вас возникли проблемы во время загрузки, обратитесь к разделу «Устранение неполадок и устранение проблем с синхронизацией» .

Создайте код

Чтобы построить код:

  1. Из рабочего каталога создайте сценарий envsetup.sh для настройки среды сборки:

    source build/envsetup.sh
  2. Укажите тип целевого устройства для сборки с помощью команды lunch . Целью является вариант устройства, например конкретная модель или форм-фактор. Укажите эту цель:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

    Вы должны увидеть краткий обзор вашей целевой среды и среды сборки:

    ============================================
    PLATFORM_VERSION_CODENAME=VanillaIceCream
    PLATFORM_VERSION=VanillaIceCream
    PRODUCT_INCLUDE_TAGS=com.android.mainline
    TARGET_PRODUCT=aosp_arm
    TARGET_BUILD_VARIANT=eng
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a-neon
    TARGET_CPU_VARIANT=generic
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
    HOST_CROSS_OS=windows
    BUILD_ID=AOSP.MAIN
    OUT_DIR=out
    ============================================
    
  3. Постройте цель:

    m

Ожидайте, что первая сборка займет несколько часов. Последующие сборки занимают значительно меньше времени. Результат вашей сборки появится в $OUT_DIR .

Запустить каракатицу

Cuttlefish — это эмулятор Android, используемый для тестирования ваших сборок.

  1. Выполните следующие команды, чтобы загрузить, собрать и установить хост-пакеты 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 .

  2. Запускаем каракатицу:

    launch_cvd --daemon
    
  3. Подключитесь к устройству Cuttlefish, перейдя по адресу https://localhost:8443 в веб-браузере. Отобразится ваше виртуальное устройство под управлением Android.

Внести изменения

Обновите исходный код, следуя этому примеру списка изменений .

  1. Из корня вашего оформления заказа (каталог aosp/ ) перейдите к проекту frameworks/native Git:

    cd frameworks/native
  2. Запустите временный проект с помощью этой команды:

    repo start <some-name> .
  3. Используйте свой редактор для редактирования SurfaceFlinger.cpp в следующем месте:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Найдите эту строку:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Добавьте эту строку в начало 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});
    
  6. Создайте код:

    m
  7. Обновите сборку на устройстве:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. Убедитесь, что вы видите изменение цвета на выбранном устройстве, подобное тому, что показано на рисунке 1.

    Example of a successful color change

    Рисунок 1. Внешний вид экрана после успешного изменения цвета

Исправить тест

В этой части лаборатории кода используется пример теста, который находится в дереве исходного кода и не пройден.

Чтобы запустить, отладить и исправить тест, следуйте этим инструкциям:

  1. Бегать:

    atest DevCodelabTest

    Тест не пройден.

  2. Изучите трассировку стека неудачного теста:

    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 .

  3. Чтобы определить расположение теста, который нужно исправить, добавьте 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 .

  4. Отредактируйте platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java и замените Assert.assertTrue(false) на Assert.assertTrue(true)

  5. Запустите тест еще раз, чтобы убедиться, что вы устранили проблему:

    atest DevCodelabTest

Загрузите свой код для проверки

Repo упрощает использование Git, объединяя такие команды, как git clone для одновременной работы с многочисленными репозиториями (или проектами) Git.

Для проверки кода ваших проектов в Git используйте веб-систему проверки кода Gerrit .

  1. Предполагая, что вы внесли изменения в frameworks/native проект, запустите эти команды, чтобы загрузить изменения:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. В качестве сообщения о фиксации введите следующее:

    Android codelab change
    Test: manual atest
    
  3. Загрузите изменение:

    repo upload

    В случае успеха вы увидите сообщение, подобное этому:

    Upload project frameworks/native/ to remote branch main:
     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/main
    

Просмотрите изменения в Gerrit

Чтобы просмотреть изменения в Gerrit, перейдите к выводу ссылки в терминале. Ссылка аналогична следующей:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

Отменить изменения

Обычно после тестирования, проверки и утверждения вы отправляете изменения в Gerrit и объединяете их в репозиторий. Вместо этого, для целей этой лаборатории кода, верните свою работу:

  1. В Gerrit нажмите «Отказаться» .

  2. Отказаться от связанной временной ветки в каталоге frameworks/native project (или его подкаталогах):

    repo abandon codelab .
  3. Отмените изменения, внесенные в тестовый файл. Поскольку вы не запускали 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 .

Тип ps -A | grep crosvm , чтобы узнать, запущен ли уже crosvm . Если crossvm запущен, введите stop_cvd || true или kill crosvm с помощью PID процесса.