A partir de 27 de março de 2025, recomendamos usar android-latest-release em vez de aosp-main para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O rastreamento do Winscope faz parte do framework do Android. Esta página descreve as
etapas necessárias para fazer o download, criar e executar o visualizador de rastros do Winscope localmente.
Criar o Winscope localmente
Siga estas etapas para configurar o PC para executar o rastreador do Winscope:
Para conferir uma lista dos comandos disponíveis, execute: npm run
Crie todos os destinos de produção e teste usando:
npm run build:prod
Execute o Winscope usando:
npm run start
Criar partes separadas
É possível criar partes individuais do Winscope separadamente usando os seguintes
comandos:
Comando
Descrição
build:trace_processor
Verifica e recria a versão mais recente do
do trace_processor do Perfetto.
build:protos
Recompila as definições de proto.
Executar testes
O Winscope contém testes de unidade e completos. Para executá-los, use npm run
<command>:
Comando
Descrição
test:unit:ci
Executa os testes de unidade em um formato menos detalhado para CI
ou gancho de pré-envio.
test:unit:dev
Executa os testes de unidade em um formato mais detalhado para o desenvolvimento
local de . Esse modo procura alterações e
reexecuta automaticamente os testes corretos.
test:e2e
Executa os testes completos, como os do protocolo
de várias ferramentas.
test:presubmit:quiet
Cria todos os testes de unidade pré-envio, linters e análises de graph
em um formato menos detalhado para CI ou gancho
pré-envio .
test:presubmit
Cria todos os testes de unidade pré-envio, linters e análise de gráfico
em um formato mais detalhado para desenvolvimento
local.
test:all
Executa todos os testes (de unidade e completos), linters e
análise de gráfico em um formato mais detalhado para o desenvolvimento
local.
Atualizar o mapeamento @IntDef
@IntDef é uma anotação usada no Android para restringir os valores possíveis de um
número inteiro. O Winscope usa um mapeamento dessas anotações para mostrar o nome do
valor em vez do número inteiro.
Para atualizar o mapeamento @IntDef, faça o seguinte:
Crie :framework-minus-apex-intdefs para que o pré-processador de anotações seja executado:
mp:framework-minus-apex-intdefs
Copie o arquivo intDefMapping.json gerado para o repositório de pré-criados:
Faça upload das mudanças no Winscope usando repo upload.
Outros comandos
Além de build e testes, os scripts do Winscope contêm outros recursos, conforme
mostrado na tabela. Para executá-los, use npm run command:
Comando
Descrição
format:check
Verifica problemas de formatação de código usando prettier.
format:fix
Verifica e corrige automaticamente problemas de formatação do código usando prettier.
eslint:check
Verifica problemas de formatação de código usando eslint.
eslint:fix
Verifica e corrige automaticamente problemas de formatação do código usando eslint.
tslint:check
Verifica problemas de formatação de código usando tslint.
tslint:fix
Verifica e corrige automaticamente problemas de formatação do código usando tslint.
deps_graph:check_cycles
Analisa o código em busca de dependências cíclicas.
Resolver problemas
Use as dicas a seguir para resolver problemas:
Erro ProtocolError: missing required '<FIELD>' ou TypeError: Cannot
read property '<PROP>' of null
Isso ocorre quando o arquivo de rastreamento foi criado com uma nova definição de proto,
que contém novos campos obrigatórios.
Verifique se você está abrindo o rastro na versão correta do Winscope
(master, S ou R).
Se você criar o novo campo no proto, recompile os protos no
Winscope usando npm run build:protos.
Algumas versões de dependências instaladas estão incorretas (falha na criação)
Reverta as alterações para package.json e package-lock.json. Remova
node_modules. Execute npm install novamente.
Adicionei um novo campo a um dos arquivos proto. Como faço para mostrar isso?
O Winscope usa as definições de proto de quando foi compilado, então novos
campos não aparecem por padrão. Para mostrar novos campos, reconstrua os protos
usando npm run build:protos.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-08-24 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-24 UTC."],[],[],null,["# Run Winscope\n\nWinscope tracing is part of the Android framework. This page outlines the\nsteps required to download, build, and run the Winscope trace viewer locally.\n\nBuild Winscope locally\n----------------------\n\nFollow these steps to set up your PC to run the Winscope tracer:\n\n1. [Download the Android source](/docs/setup/build/building).\n2. Navigate to the Winscope folder:\n\n cd development/tools/winscope\n\n3. Install dependencies using:\n\n npm install\n\n To see a list of available commands, run: `npm run`\n4. Build all prod and test targets using:\n\n npm run build:prod\n\n5. Run Winscope using:\n\n npm run start\n\n| **Note:** You can also download and build Winscope to host on a standard web server to get a shareable link to the tool.\n\nBuild separate parts\n--------------------\n\nYou can build individual parts of Winscope separately using the following\ncommands:\n\n| Command | Description |\n|-------------------------|-----------------------------------------------------------------------------|\n| `build:trace_processor` | Checks out and rebuilds the latest version of Perfetto's `trace_processor`. |\n| `build:protos` | Recompiles the proto definitions. |\n\nRun tests\n---------\n\n| **Tip:** Winscope doesn't build on Soong and can't be built by Tradefed, so it's recommended to have a local Git hook to the tests in your local environment.\n\nWinscope contains unit and end-to-end tests. To run them use `npm run\n\u003ccommand\u003e`:\n\n| Command | Description |\n|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|\n| `test:unit:ci` | Runs the unit tests in a less verbose format for CI or presubmit hook. |\n| `test:unit:dev` | Runs the unit tests in a more verbose format for local development. This mode watches for changes and automatically reruns the correct tests. |\n| `test:e2e` | Runs the end-to-end tests, such as those for the cross-tool protocol. |\n| `test:presubmit:quiet` | Builds all presubmit unit tests, linters, and graph analysis in a less verbose format for CI or presubmit hook. |\n| `test:presubmit` | Builds all presubmit unit tests, linters, and graph analysis in a more verbose format for local development. |\n| `test:all` | Runs all tests (unit and end-to-end), linters, and graph analysis in a more verbose format for local development. |\n\n### Update @IntDef mapping\n\n`@IntDef` is an annotation used in Android to restrict the possible values of an\ninteger. Winscope uses a mapping of these annotations to display the name of the\nvalue instead of the integer.\n\nTo update the `@IntDef` mapping, do the following:\n\n1. Build `:framework-minus-apex-intdefs` for the annotation preprocessor to run:\n\n mp :framework-minus-apex-intdefs\n\n2. Copy the generated `intDefMapping.json` file to the prebuilts repository:\n\n $ 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) \u003e ./development/tools/winscope/src/common/intDefMapping.json\n\n3. Upload the changes in Winscope using `repo upload`.\n\nOther commands\n--------------\n\nIn addition to build and tests, Winscope scripts contain other capabilities, as\nshown in the table. To run them use `npm run `\u003cvar translate=\"no\"\u003ecommand\u003c/var\u003e:\n\n| Command | Description |\n|---------------------------|----------------------------------------------------------------|\n| `format:check` | Checks for code formatting issues using `prettier`. |\n| `format:fix` | Checks and auto fixes code formatting issues using `prettier`. |\n| `eslint:check` | Checks for code formatting issues using `eslint`. |\n| `eslint:fix` | Checks and auto fixes code formatting issues using `eslint`. |\n| `tslint:check` | Checks for code formatting issues using `tslint`. |\n| `tslint:fix` | Checks and auto fixes code formatting issues using `tslint`. |\n| `deps_graph:check_cycles` | Analyzes the code for cyclical dependencies. |\n\nTroubleshoot\n------------\n\nUse the following tips for troubleshooting:\n\n- **Error `ProtocolError: missing required '\u003cFIELD\u003e'` or `TypeError: Cannot\n read property '\u003cPROP\u003e' of null`**\n\n - This occurs when the trace file was created with a new proto definition,\n containing new *required* fields.\n\n 1. Make sure you're opening the trace on the correct Winscope version (master, S, or R).\n 2. If you create the new field on the proto, recompile the protos in\n Winscope using `npm run build:protos`.\n\n | **Note:** You shouldn't need a new required field, because the protos should be backward compatible.\n- **Some installed dependency versions are wrong (build fails)**\n\n - Revert changes to `package.json` and `package-lock.json`. Remove `node_modules`. Run `npm install` again.\n- **I added a new field to one of the proto files. How do I display it?**\n\n - Winscope uses the proto definitions from when it was compiled, so new fields won't appear by default. To show new fields, rebuild the protos using `npm run build:protos`."]]