Perekaman aktivitas Winscope adalah bagian dari framework Android. Halaman ini menguraikan langkah-langkah yang diperlukan untuk mendownload, membuat, dan menjalankan pelihat rekaman aktivitas Winscope secara lokal.
Membangun Winscope secara lokal
Ikuti langkah-langkah berikut untuk menyiapkan PC Anda agar dapat menjalankan perekam aktivitas Winscope:
- Download sumber Android.
Buka folder Winscope:
cd development/tools/winscopeInstal dependensi menggunakan:
npm installUntuk melihat daftar perintah yang tersedia, jalankan:
npm runBangun semua target produksi dan pengujian menggunakan:
npm run build:prodJalankan Winscope menggunakan:
npm run start
Membangun bagian terpisah
Anda dapat membuat setiap bagian Winscope secara terpisah menggunakan perintah berikut:
| Perintah | Deskripsi |
|---|---|
build:trace_processor |
Memeriksa dan membangun kembali versi terbarutrace_processor Perfetto. |
build:protos |
Mengompilasi ulang definisi proto. |
Menjalankan pengujian
Winscope berisi pengujian unit dan end-to-end. Untuk menjalankannya, gunakan npm run
<command>:
| Perintah | Deskripsi |
|---|---|
test:unit:ci |
Menjalankan pengujian unit dalam format yang tidak terlalu verbose untuk CI atau hook pra-submit. |
test:unit:dev |
Menjalankan pengujian unit dalam format yang lebih verbose untuk pengembangan lokal. Mode ini memantau perubahan dan secara otomatis menjalankan ulang pengujian yang benar. |
test:e2e |
Menjalankan pengujian menyeluruh, seperti pengujian untuk protokol lintas alat . |
test:presubmit:quiet |
Membangun semua pengujian unit pra-submit, linter, dan analisis grafik dalam format yang tidak terlalu verbose untuk hook pra-submit atau CI . |
test:presubmit |
Membangun semua pengujian unit pra-kirim, linter, dan analisis grafik dalam format yang lebih verbose untuk pengembangan lokal. |
test:all |
Menjalankan semua pengujian (unit dan end-to-end), linter, dan analisis grafik dalam format yang lebih verbose untuk pengembangan lokal. |
Pengujian menyeluruh
Sebelum menjalankan pengujian end-to-end, Anda harus memulai alat jarak jauh dan menginstal driver Chrome versi yang benar. Dalam cuplikan kode berikut, perintah
run test:e2e akan otomatis menginstal driver Chrome.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
Tabel berikut mencantumkan perintah yang diperlukan dan deskripsinya. Untuk menjalankannya, gunakan npm run command:
| Perintah | Deskripsi |
|---|---|
start:remote_tool_mock |
Memulai tiruan alat jarak jauh untuk menguji protokol lintas alat. |
install:chromedriver |
Menginstal driver Chrome yang diperlukan untuk menjalankan pengujian menyeluruh. |
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.
Jika nilai @IntDef baru ditambahkan ke framework Android, tetapi tidak diperbarui di Winscope, nilai tersebut akan ditampilkan sebagai nilai bilangan bulat mentah, bukan string deskriptif. Untuk memperbaiki masalah ini, perbarui file pemetaan IntDef
(development/tools/winscope/src/common/intDefMapping.json).
Untuk memperbarui pemetaan @IntDef secara otomatis, lakukan langkah-langkah berikut:
Jalankan skrip
update_intdef_mappings.shdari direktoridevelopment/tools/winscope/scripts/di struktur Android lokal Anda. Skrip ini memicu proses anotasi yang mengekstrak nilai@IntDefterbaru dari kode dan memperbaruiintDefMapping.json:cd development/tools/winscope ./scripts/update_intdef_mappings.shLakukan commit perubahan ke
src/common/intDefMapping.jsonmenggunakan perintahgit commitdan upload menggunakan perintahrepo upload.
Jika skrip tidak tersedia, ikuti langkah-langkah berikut untuk memperbarui pemetaan @IntDef
secara manual dari direktori root Android Anda ($ANDROID_BUILD_TOP):
Bangun
framework-minus-apex-intdefsuntuk menjalankan preprosesor anotasi:m framework-minus-apex-intdefsSalin file
intDefMapping.jsonyang dihasilkan ke repositori prebuilt:$ 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.jsonUpload 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>'atauTypeError: Cannot read property '<PROP>' of nullHal ini terjadi saat file rekaman aktivitas dibuat dengan definisi proto baru, yang berisi kolom wajib diisi baru.
- Pastikan Anda membuka rekaman aktivitas di 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)
- Mengembalikan perubahan pada
package.jsondanpackage-lock.json. Hapusnode_modules. Jalankannpm installlagi.
- Mengembalikan perubahan pada
Saya menambahkan kolom baru ke salah satu file proto. Bagaimana cara menampilkannya?
- Winscope menggunakan definisi proto dari saat dikompilasi, sehingga kolom
baru tidak akan muncul secara default. Untuk menampilkan kolom baru, bangun ulang proto menggunakan
npm run build:protos.
- Winscope menggunakan definisi proto dari saat dikompilasi, sehingga kolom
baru tidak akan muncul secara default. Untuk menampilkan kolom baru, bangun ulang proto menggunakan