Лаборатория кода для Android-разработчиков

Вы можете помочь разработать самую распространенную операционную систему в истории Земли. Да, вы здесь, чтобы начать путь становления инженером платформы Android.

Хотя путь непрост, команда Android стремится упростить ваш путь с каждым выпуском. И команда каждый день вносит улучшения посредством непосредственной работы в проекте Android Open Source Project (AOSP).

Так что расслабьтесь, включите терминал и давайте творить историю.

Цели

Миссия этой кодовой лаборатории двоякая:

  1. Чтобы дать вам небольшое представление о том, как выглядит рабочий процесс разработчиков Android, работающих над платформой (операционной системой).
  2. Поощряйте вас оставлять отзывы об инструментах Android, документации и рабочем процессе разработчиков.

Предварительные условия

Список требований для этой кодовой лаборатории взят из требований для разработки общей платформы ( AOSP ). Чтобы воспользоваться этой лабораторией кода, настройте следующее:

Среда

Обычно пользователи создают и разрабатывают приложения непосредственно на рабочей станции. Поскольку вы можете работать в разных терминалах, а многие из используемых команд зависят от терминала, вам придется запускать их повторно в каждом сеансе терминала. В частности, к ним относятся source build/envsetup.sh и lunch .

Настройка рабочей станции

  1. Установите необходимые пакеты на свою рабочую станцию.
  2. Продолжая работать в терминале, установите Repo и получите учетные данные для всех репозиториев Git.

Инициализируйте и синхронизируйте код

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

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

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

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

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

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

    repo sync -j8

Первоначальная синхронизация может занять час или больше.

Каждая проверка репо представлена ​​файлом манифеста . Допустимо иметь более одной проверки репо одновременно, если они существуют в разных каталогах. Но учтите, что каждое извлечение и сборка занимает примерно 300 ГБ (и продолжает расти), поэтому либо ограничьте себя двумя извлечениями репозитория, либо дополните свою систему дополнительным диском.

Создайте код

Чтобы собрать Android, вы должны выбрать тип целевого устройства для сборки с помощью команды lunch . Целью является вариант устройства, например конкретная модель или форм-фактор.

Цель устройства aosp_cf_x86_64_phone-userdebug позволяет вам создать виртуальное Android-устройство Cuttlefish для тестирования без физического устройства.

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

  1. Настройте среду для создания устройств Android, выполнив следующую команду из корня извлечения исходного кода:

    source build/envsetup.sh
  2. Передайте цель сборки команде обеда, например:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Создайте код из любой точки оформления заказа с помощью:

    m

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

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

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

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

Убедитесь, что вы видите изменение цвета на выбранном устройстве, подобное тому, что показано на рисунке 1.

Example of a successful color change

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

Проверьте свой код

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

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

  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)
  3. Тогда посмотри сюда

    platform_testing/tests/example/devcodelab
    
  4. Чтобы файл можно было редактировать, возьмите имя теста в android.test.example.devcodelab.DevCodelabTest и замените расширение . с / , чтобы получить этот результат:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Затем отредактируйте

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    заменить

    Assert.assertTrue(false)
    

    с

    Assert.assertTrue(true)
    
  6. Запустите тест еще раз, чтобы убедиться, что вы устранили проблему:

    atest DevCodelabTest

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

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

См . раздел «Инструменты контроля версий» , где представлены обзоры Git и Repo, а также ссылки на полную документацию по работе с исходным кодом Android. Полный список проектов Git и отдельные проекты (пути) для ветвей, связанных с каждым проектом, см. в репозитории AOSP .

Для проверки кода ваших проектов в 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

Перейдите по ссылке, напечатанной в терминале, которая похожа на эту:

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

На этом стартовая лаборатория разработки кода для платформы Android завершена. Дальнейшие действия см. в разделе «Отправка исправлений» , а полную информацию о разработке Android см. в остальной части этого сайта.

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

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

Вместо этого для целей этой лаборатории кода отмените список изменений, нажав «Отменить» в Gerrit.

Затем закройте связанную временную ветку в каталоге frameworks/native project (или его подкаталогах):

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 .