Запустить Winscope

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

Соберите Winscope локально.

Выполните следующие шаги, чтобы настроить свой компьютер для запуска трассировщика Winscope:

  1. Скачайте исходный код для Android .
  2. Перейдите в папку Winscope:

    cd development/tools/winscope
    
  3. Установите зависимости с помощью:

    npm install
    

    Чтобы увидеть список доступных команд, выполните команду: npm run

  4. Для сборки всех целей для продакшена и тестирования используйте:

    npm run build:prod
    
  5. Запустите Winscope, используя:

    npm run start
    

Соберите отдельные детали

Вы можете собирать отдельные компоненты Winscope по отдельности, используя следующие команды:

Командование Описание
build:trace_processor Проверяет и пересобирает последнюю версию
trace_processor Perfetto.
build:protos Перекомпилирует определения протоколов.

Запустите тесты

Winscope содержит модульные и сквозные тесты. Для их запуска используйте npm run <command> :`.

Командование Описание
test:unit:ci Запускает модульные тесты в менее подробном формате для непрерывной интеграции.
или хук предварительной отправки.
test:unit:dev Запускает модульные тесты в более подробном формате для
Локальная разработка. Этот режим отслеживает изменения и
Автоматически перезапускает необходимые тесты.
test:e2e Выполняет сквозные тесты, например, для
протокол межинструментального взаимодействия.
test:presubmit:quiet Создает все модульные тесты, линтеры и графы перед отправкой.
Анализ в менее подробном формате для CI или предварительной отправки
крюк.
test:presubmit Создает все модульные тесты, линтеры и графы перед отправкой.
анализ в более подробном формате для локального
разработка.
test:all Выполняет все тесты (модульные и сквозные), линтеры и
Анализ графов в более подробном формате для локального контекста
разработка.

Сквозные тесты

Перед запуском сквозных тестов необходимо запустить инструмент удаленного доступа и установить правильную версию драйвера Chrome. В приведенном ниже фрагменте кода команда run test:e2e автоматически устанавливает драйвер Chrome.

$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e

В таблице ниже перечислены необходимые команды и их описания. Для их выполнения используйте npm run command :

Командование Описание
start:remote_tool_mock Запускает имитацию удаленного инструмента для тестирования протокола взаимодействия между инструментами.
install:chromedriver Устанавливает драйвер Chrome, необходимый для проведения сквозных тестов.

Обновление сопоставления @IntDef

Аннотация @IntDef используется в Android для ограничения возможных значений целого числа. Winscope использует сопоставление этих аннотаций для отображения имени значения вместо самого целого числа.

Если новые значения @IntDef добавлены в Android-фреймворк, но не обновлены в Winscope, они отображаются как необработанные целочисленные значения вместо описательных строк. Для решения этой проблемы обновите файл сопоставления IntDef ( development/tools/winscope/src/common/intDefMapping.json ).

Для автоматического обновления сопоставления @IntDef выполните следующие действия:

  1. Запустите скрипт update_intdef_mappings.sh из каталога development/tools/winscope/scripts/ в локальной директории Android. Этот скрипт запускает процесс аннотирования, который извлекает последние значения @IntDef из кода и обновляет файл intDefMapping.json :

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. Зафиксируйте изменения в файле src/common/intDefMapping.json с помощью команды git commit и загрузите их с помощью команды repo upload .

Если скрипт недоступен, выполните следующие действия, чтобы обновить сопоставление @IntDef вручную из корневого каталога Android ( $ANDROID_BUILD_TOP ):

  1. Для запуска препроцессора аннотаций соберите framework-minus-apex-intdefs :

    m framework-minus-apex-intdefs
    
  2. Скопируйте сгенерированный файл intDefMapping.json в репозиторий предварительно собранных программ:

    $ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
    
  3. Загрузите изменения в Winscope, используя repo upload .

Другие команды

Помимо сборки и тестирования, скрипты Winscope обладают и другими возможностями, как показано в таблице. Для их запуска используйте npm run command :

Командование Описание
format:check Проверяет наличие проблем с форматированием кода с помощью prettier .
format:fix Проверяет и автоматически исправляет проблемы форматирования кода с помощью prettier .
eslint:check Проверяет код на наличие проблем с форматированием с помощью eslint .
eslint:fix Проверяет и автоматически исправляет проблемы форматирования кода с помощью eslint .
tslint:check Проверяет код на наличие проблем с форматированием с помощью tslint .
tslint:fix Проверяет и автоматически исправляет ошибки форматирования кода с помощью tslint .
deps_graph:check_cycles Анализирует код на наличие циклических зависимостей.

Устранение неполадок

Воспользуйтесь следующими советами по устранению неполадок:

  • Ошибка ProtocolError: missing required '<FIELD>' или TypeError: Cannot read property '<PROP>' of null

    • Это происходит, когда файл трассировки был создан с новым определением протокола, содержащим новые обязательные поля.

      1. Убедитесь, что вы открываете трассировку в правильной версии Winscope (master, S или R).
      2. Если вы создадите новое поле в протоколе, перекомпилируйте протоколы в Winscope с помощью npm run build:protos .

  • Некоторые установленные версии зависимостей некорректны (сборка завершается с ошибкой).

    • Отмените изменения в файлах package.json и package-lock.json . Удалите папку node_modules . Снова запустите npm install .
  • Я добавил новое поле в один из proto-файлов. Как мне его отобразить?

    • Winscope использует определения протоколов, полученные при компиляции, поэтому новые поля по умолчанию отображаться не будут. Чтобы отобразить новые поля, пересоберите протоколы с помощью npm run build:protos .