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 |
檢出並重建 Perfetto 的 trace_processor 最新版本。 |
build:protos |
重新編譯 proto 定義。 |
執行測試
Winscope 包含單元和端對端測試。如要執行這些測試,請使用 npm run
<command>
:
指令 | 說明 |
---|---|
test:unit:ci |
以較不冗長的格式執行單元測試,以便用於 CI 或提交前掛鉤。 |
test:unit:dev |
以更詳細的格式執行單元測試,以便 進行本機開發。這個模式會監控變更,並 自動重新執行正確的測試。 |
test:e2e |
執行端對端測試,例如 跨工具通訊協定的測試。 |
test:presubmit:quiet |
以較精簡的格式建構所有提交前單元測試、Lint 和圖表 分析,以便用於 CI 或提交前 鉤子。 |
test:presubmit |
以更詳細的格式建構所有提交前單元測試、Lint 和圖表分析,以便進行本機開發。 |
test:all |
以更詳細的格式執行所有測試 (單元和端對端)、Lint 工具和 圖表分析,以便進行本機 開發作業。 |
更新 @IntDef 對應
@IntDef
是 Android 中用來限制整數可能值的註解。Winscope 會使用這些註解的對應項目,顯示值的名稱,而非整數。
如要更新 @IntDef
對應項目,請按照下列步驟操作:
建構
:framework-minus-apex-intdefs
,讓註解前置處理器執行:mp :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
使用
repo upload
上傳 Winscope 中的變更內容。
其他指令
除了建構和測試外,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
發生這種情況時,表示追蹤記錄檔是使用新的 proto 定義建立,且包含新的必要欄位。
- 請確認您在正確的 Winscope 版本 (master、S 或 R) 上開啟追蹤記錄。
如果您在 Proto 上建立新欄位,請使用
npm run build:protos
在 Winscope 中重新編譯 Proto。
部分已安裝的依附元件版本有誤 (建構失敗)
- 將變更還原為
package.json
和package-lock.json
。移除node_modules
。再次執行npm install
。
- 將變更還原為
我已在其中一個 proto 檔案中新增欄位。如何顯示?
- Winscope 會使用編譯時的 proto 定義,因此新欄位不會根據預設顯示。如要顯示新的欄位,請使用
npm run build:protos
重新建構 proto。
- Winscope 會使用編譯時的 proto 定義,因此新欄位不會根據預設顯示。如要顯示新的欄位,請使用