Tính năng theo dõi Winscope là một phần của khung Android. Trang này trình bày các bước cần thiết để tải xuống, tạo và chạy trình xem dấu vết Winscope cục bộ.
Tạo Winscope cục bộ
Làm theo các bước sau để thiết lập máy tính chạy Winscope tracer:
- Tải nguồn Android xuống.
Chuyển đến thư mục Winscope:
cd development/tools/winscopeCài đặt các phần phụ thuộc bằng cách sử dụng:
npm installĐể xem danh sách các lệnh hiện có, hãy chạy:
npm runTạo tất cả các mục tiêu kiểm thử và mục tiêu phát hành công khai bằng cách sử dụng:
npm run build:prodChạy Winscope bằng cách:
npm run start
Xây dựng các phần riêng biệt
Bạn có thể tạo riêng từng phần của Winscope bằng các lệnh sau:
| Lệnh | Mô tả |
|---|---|
build:trace_processor |
Kiểm tra và tạo lại phiên bản mới nhất của trace_processor Perfetto. |
build:protos |
Biên dịch lại các định nghĩa proto. |
Chạy chương trình kiểm thử
Winscope chứa các kiểm thử đơn vị và kiểm thử toàn diện. Để chạy các kiểm thử này, hãy sử dụng npm run
<command>:
| Lệnh | Mô tả |
|---|---|
test:unit:ci |
Chạy các kiểm thử đơn vị ở định dạng ít chi tiết hơn cho CI hoặc lệnh gọi trước khi gửi. |
test:unit:dev |
Chạy các kiểm thử đơn vị ở định dạng chi tiết hơn cho quá trình phát triển cục bộ . Chế độ này theo dõi các thay đổi và tự động chạy lại các quy trình kiểm thử chính xác. |
test:e2e |
Chạy các kiểm thử toàn diện, chẳng hạn như các kiểm thử cho giao thức trên nhiều công cụ. |
test:presubmit:quiet |
Tạo tất cả các kiểm thử đơn vị trước khi gửi, trình kiểm tra và phân tích đồ thị ở định dạng ít chi tiết hơn cho CI hoặc lệnh gọi trước khi gửi . |
test:presubmit |
Tạo tất cả các kiểm thử đơn vị trước khi gửi, trình kiểm tra và phân tích đồ thị ở định dạng chi tiết hơn cho quá trình phát triển cục bộ . |
test:all |
Chạy tất cả các kiểm thử (đơn vị và toàn bộ), trình kiểm tra lỗi và phân tích biểu đồ ở định dạng chi tiết hơn cho quá trình phát triển cục bộ. |
Kiểm thử toàn diện
Trước khi chạy các kiểm thử từ đầu đến cuối, bạn phải khởi động công cụ từ xa và cài đặt đúng phiên bản trình điều khiển Chrome. Trong đoạn mã sau, lệnh run test:e2e sẽ tự động cài đặt trình điều khiển Chrome.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
Bảng sau đây liệt kê các lệnh cần thiết và nội dung mô tả của các lệnh đó. Để chạy các lệnh này, hãy sử dụng npm run command:
| Lệnh | Mô tả |
|---|---|
start:remote_tool_mock |
Khởi động mô hình công cụ từ xa để kiểm thử giao thức giữa các công cụ. |
install:chromedriver |
Cài đặt trình điều khiển Chrome cần thiết để chạy các kiểm thử toàn diện. |
Cập nhật mối liên kết @IntDef
@IntDef là một chú giải được dùng trong Android để hạn chế các giá trị có thể có của một số nguyên. Winscope sử dụng một mối liên kết của các chú thích này để hiển thị tên của giá trị thay vì số nguyên.
Nếu các giá trị @IntDef mới được thêm vào khung Android nhưng không được cập nhật trong Winscope, thì các giá trị này sẽ xuất hiện dưới dạng giá trị số nguyên thô thay vì chuỗi mô tả. Để khắc phục vấn đề này, hãy cập nhật tệp ánh xạ IntDef (development/tools/winscope/src/common/intDefMapping.json).
Để tự động cập nhật mối liên kết @IntDef, hãy làm như sau:
Chạy tập lệnh
update_intdef_mappings.shtrong thư mụcdevelopment/tools/winscope/scripts/trên cây Android cục bộ. Tập lệnh này kích hoạt quy trình chú thích để trích xuất các giá trị@IntDefmới nhất từ mã và cập nhậtintDefMapping.json:cd development/tools/winscope ./scripts/update_intdef_mappings.shXác nhận các thay đổi đối với
src/common/intDefMapping.jsonbằng lệnhgit commitvà tải các thay đổi đó lên bằng lệnhrepo upload.
Nếu không có tập lệnh, hãy làm theo các bước sau để cập nhật ánh xạ @IntDef theo cách thủ công từ thư mục gốc Android ($ANDROID_BUILD_TOP):
Tạo bản dựng
framework-minus-apex-intdefsđể bộ tiền xử lý chú giải chạy:m framework-minus-apex-intdefsSao chép tệp
intDefMapping.jsonđã tạo vào kho lưu trữ được tạo sẵ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) > ./development/tools/winscope/src/common/intDefMapping.jsonTải các thay đổi lên Winscope bằng cách sử dụng
repo upload.
Các lệnh khác
Ngoài các bản dựng và kiểm thử, tập lệnh Winscope còn có các chức năng khác, như minh hoạ trong bảng. Để chạy các kiểm thử này, hãy sử dụng npm run command:
| Lệnh | Mô tả |
|---|---|
format:check |
Kiểm tra các vấn đề về định dạng mã bằng cách sử dụng prettier. |
format:fix |
Kiểm tra và tự động khắc phục các vấn đề về định dạng mã bằng cách sử dụng prettier. |
eslint:check |
Kiểm tra các vấn đề về định dạng mã bằng cách sử dụng eslint. |
eslint:fix |
Kiểm tra và tự động khắc phục các vấn đề về định dạng mã bằng cách sử dụng eslint. |
tslint:check |
Kiểm tra các vấn đề về định dạng mã bằng cách sử dụng tslint. |
tslint:fix |
Kiểm tra và tự động khắc phục các vấn đề về định dạng mã bằng cách sử dụng tslint. |
deps_graph:check_cycles |
Phân tích mã để tìm các phần phụ thuộc theo chu kỳ. |
Khắc phục sự cố
Hãy làm theo các mẹo sau để khắc phục sự cố:
Lỗi
ProtocolError: missing required '<FIELD>'hoặcTypeError: Cannot read property '<PROP>' of nullĐiều này xảy ra khi tệp theo dõi được tạo bằng một định nghĩa proto mới, chứa các trường bắt buộc mới.
- Đảm bảo bạn đang mở dấu vết trên đúng phiên bản Winscope (master, S hoặc R).
Nếu bạn tạo trường mới trên proto, hãy biên dịch lại các proto trong Winscope bằng cách sử dụng
npm run build:protos.
Một số phiên bản phần phụ thuộc đã cài đặt không chính xác (không tạo được bản dựng)
- Huỷ bỏ các thay đổi đối với
package.jsonvàpackage-lock.json. Xoánode_modules. Chạy lạinpm install.
- Huỷ bỏ các thay đổi đối với
Tôi đã thêm một trường mới vào một trong các tệp proto. Làm cách nào để hiển thị thông tin này?
- Winscope sử dụng các định nghĩa proto từ thời điểm được biên dịch, vì vậy, các trường mới sẽ không xuất hiện theo mặc định. Để hiện các trường mới, hãy tạo lại các proto bằng cách sử dụng
npm run build:protos.
- Winscope sử dụng các định nghĩa proto từ thời điểm được biên dịch, vì vậy, các trường mới sẽ không xuất hiện theo mặc định. Để hiện các trường mới, hãy tạo lại các proto bằng cách sử dụng