Трассировка Winscope является частью фреймворка Android. На этой странице описаны шаги, необходимые для загрузки, сборки и запуска локального средства просмотра трассировки Winscope.
Соберите Winscope локально.
Выполните следующие шаги, чтобы настроить свой компьютер для запуска трассировщика Winscope:
- Скачайте исходный код для Android .
Перейдите в папку Winscope:
cd development/tools/winscopeУстановите зависимости с помощью:
npm installЧтобы увидеть список доступных команд, выполните команду:
npm runДля сборки всех целей для продакшена и тестирования используйте:
npm run build:prodЗапустите 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 выполните следующие действия:
Запустите скрипт
update_intdef_mappings.shиз каталогаdevelopment/tools/winscope/scripts/в локальной директории Android. Этот скрипт запускает процесс аннотирования, который извлекает последние значения@IntDefиз кода и обновляет файлintDefMapping.json:cd development/tools/winscope ./scripts/update_intdef_mappings.shЗафиксируйте изменения в файле
src/common/intDefMapping.jsonс помощью командыgit commitи загрузите их с помощью командыrepo upload.
Если скрипт недоступен, выполните следующие действия, чтобы обновить сопоставление @IntDef вручную из корневого каталога Android ( $ANDROID_BUILD_TOP ):
Для запуска препроцессора аннотаций соберите
framework-minus-apex-intdefs:m framework-minus-apex-intdefsСкопируйте сгенерированный файл
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Загрузите изменения в 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Это происходит, когда файл трассировки был создан с новым определением протокола, содержащим новые обязательные поля.
- Убедитесь, что вы открываете трассировку в правильной версии Winscope (master, S или R).
Если вы создадите новое поле в протоколе, перекомпилируйте протоколы в Winscope с помощью
npm run build:protos.
Некоторые установленные версии зависимостей некорректны (сборка завершается с ошибкой).
- Отмените изменения в файлах
package.jsonиpackage-lock.json. Удалите папкуnode_modules. Снова запуститеnpm install.
- Отмените изменения в файлах
Я добавил новое поле в один из proto-файлов. Как мне его отобразить?
- Winscope использует определения протоколов, полученные при компиляции, поэтому новые поля по умолчанию отображаться не будут. Чтобы отобразить новые поля, пересоберите протоколы с помощью
npm run build:protos.
- Winscope использует определения протоколов, полученные при компиляции, поэтому новые поля по умолчанию отображаться не будут. Чтобы отобразить новые поля, пересоберите протоколы с помощью