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

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

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

Создайте код

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

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

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

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

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

    lunch aosp_cf_x86_64_phone-userdebug
    
  3. Создавайте код из любого места на кассе с помощью:

    m
    

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

Создайте экземпляр Acloud

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

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

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

    acloud create --local-image --local-instance
    
  2. Примите обновления для необходимых пакетов.

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

  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. Найдите эти две строки:

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

    postFrame();
    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 project, запустите эти команды, чтобы загрузить их:

    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 master:
  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/master

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

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

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

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

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

Обычно после тестирования и после проверки и утверждения вы отправляете свои изменения в 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 .

На этом все готово! Хорошо сделано!

Получить помощь

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