Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release, bukan aosp-main, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Pelacakan Winscope adalah bagian dari framework Android. Halaman ini menguraikan
langkah-langkah yang diperlukan untuk mendownload, mem-build, dan menjalankan penampil rekaman aktivitas Winscope secara lokal.
Mem-build Winscope secara lokal
Ikuti langkah-langkah berikut untuk menyiapkan PC Anda guna menjalankan pelacak Winscope:
Untuk melihat daftar perintah yang tersedia, jalankan: npm run
Build semua target produksi dan pengujian menggunakan:
npm run build:prod
Jalankan Winscope menggunakan:
npm run start
Mem-build bagian terpisah
Anda dapat mem-build setiap bagian Winscope secara terpisah menggunakan perintah
berikut:
Perintah
Deskripsi
build:trace_processor
Memeriksa dan mem-build ulang versi terbaru trace_processor Perfetto.
build:protos
Mengompilasi ulang definisi proto.
Menjalankan pengujian
Winscope berisi pengujian unit dan menyeluruh. Untuk menjalankannya, gunakan npm run
<command>:
Perintah
Deskripsi
test:unit:ci
Menjalankan pengujian unit dalam format yang lebih ringkas untuk hook presubmit
atau CI .
test:unit:dev
Menjalankan pengujian unit dalam format yang lebih panjang untuk
pengembangan lokal. Mode ini memantau perubahan dan
otomatis menjalankan ulang pengujian yang benar.
test:e2e
Menjalankan pengujian menyeluruh, seperti pengujian untuk protokol lintas alat .
test:presubmit:quiet
Mem-build semua pengujian unit pra-pengiriman, linter, dan analisis
grafik dalam format yang lebih ringkas untuk hook CI atau presubmit .
test:presubmit
Mem-build semua pengujian unit pra-pengiriman, linter, dan analisis
grafik dalam format yang lebih panjang untuk pengembangan
lokal.
test:all
Menjalankan semua pengujian (unit dan menyeluruh), linter, dan analisis grafik
dalam format yang lebih panjang untuk pengembangan
lokal.
Memperbarui pemetaan @IntDef
@IntDef adalah anotasi yang digunakan di Android untuk membatasi kemungkinan nilai
bilangan bulat. Winscope menggunakan pemetaan anotasi ini untuk menampilkan nama
nilai, bukan bilangan bulat.
Untuk memperbarui pemetaan @IntDef, lakukan hal berikut:
Build :framework-minus-apex-intdefs agar preprosesor anotasi dapat berjalan:
mp:framework-minus-apex-intdefs
Salin file intDefMapping.json yang dihasilkan ke repositori bawaan:
Upload perubahan di Winscope menggunakan repo upload.
Perintah lainnya
Selain build dan pengujian, skrip Winscope berisi kemampuan lain, seperti
yang ditunjukkan dalam tabel. Untuk menjalankannya, gunakan npm run command:
Perintah
Deskripsi
format:check
Memeriksa masalah pemformatan kode menggunakan prettier.
format:fix
Memeriksa dan memperbaiki masalah pemformatan kode secara otomatis menggunakan prettier.
eslint:check
Memeriksa masalah pemformatan kode menggunakan eslint.
eslint:fix
Memeriksa dan memperbaiki masalah pemformatan kode secara otomatis menggunakan eslint.
tslint:check
Memeriksa masalah pemformatan kode menggunakan tslint.
tslint:fix
Memeriksa dan memperbaiki masalah pemformatan kode secara otomatis menggunakan tslint.
deps_graph:check_cycles
Menganalisis kode untuk dependensi siklus.
Memecahkan masalah
Gunakan tips berikut untuk memecahkan masalah:
Error ProtocolError: missing required '<FIELD>' atau TypeError: Cannot
read property '<PROP>' of null
Hal ini terjadi saat file rekaman aktivitas dibuat dengan definisi proto baru,
yang berisi kolom wajib baru.
Pastikan Anda membuka rekaman aktivitas pada versi Winscope yang benar
(master, S, atau R).
Jika Anda membuat kolom baru di proto, kompilasi ulang proto di
Winscope menggunakan npm run build:protos.
Beberapa versi dependensi yang diinstal salah (build gagal)
Kembalikan perubahan ke package.json dan package-lock.json. Hapus
node_modules. Jalankan npm install lagi.
Saya menambahkan kolom baru ke salah satu file proto. Bagaimana cara menampilkannya?
Winscope menggunakan definisi proto sejak dikompilasi, sehingga kolom
baru tidak akan muncul secara default. Untuk menampilkan kolom baru, build ulang proto
menggunakan npm run build:protos.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-24 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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`."]]