Лаборатория кода для 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
    

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

Создать экземпляр Cloud

Acloud — это инструмент командной строки в AOSP, который помогает пользователям создавать виртуальные устройства Android, в данном случае Cuttlefish.

Если вы находитесь в том же сеансе терминала, который использовался для создания кода , продолжайте. В противном случае повторно запустите сценарий envsetup.sh и ту же команду lunch , которую вы использовали в первую очередь. Затем

  1. Установите зависимости для локального запуска виртуального устройства Cuttlefish с помощью:

    acloud setup
    
  2. При появлении запроса перезагрузите рабочую станцию, чтобы все изменения вступили в силу.

  3. Создайте локальный экземпляр acloud с помощью:

    acloud create --local-image --local-instance
    
  4. Выберите устройство «Каракатица».

Вас должен приветствовать сеанс VNC, содержащий устройство Android!

Вы можете взаимодействовать с виртуальным устройством на своей рабочей станции с помощью мыши и клавиатуры. Вы также можете следить за активностью в журналах во время использования устройства, используя команду logcat Android Debug Bridge (adb):

adb logcat

Изменить

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

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

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

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

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

    postComposition();
    
  5. Замените эти две строки следующими:

    postComposition();
    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});
    updateColorMatrixLocked();
    
  6. Создайте код:

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

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. Если вам будет предложено выбрать устройство, выберите то, которое показывает наименьшее прошедшее время. (Вероятно, это последнее в списке, который вы видите.) Чтобы просмотреть все экземпляры виртуальных устройств, используйте команды acloud list и acloud list -v .

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

Example of a successful color change

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

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

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

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

  1. Бегать:

    atest DevCodelabTest
    
  2. Тест провалится. Чтобы это исправить, найдите исходный код неудачного теста:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  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 .