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

Это руководство позволит вам впервые попробовать разработку для операционной системы 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 выполните следующие действия:

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

    sudo apt-get update
  2. Выполните следующую команду для установки Repo launcher:

    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 в него и проверяют, соответствует ли предоставленный ключ требуемому. Если эти команды выполнены успешно, последняя команда устанавливает Repo-лаунчер.

  4. Проверьте версию Repo launcher:

    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 ( android-latest-release ):

    repo init --partial-clone -b android-latest-release -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_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
    ============================================
    
  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/ ) перейдите к проекту Git frameworks/native :

    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 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 и объединяете их с репозиторием. Вместо этого, для целей этой практической работы, верните свою работу:

  1. В Gerrit нажмите кнопку Отменить .

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

    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-build .

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