Winscope トレースは Android フレームワークの一部です。このページでは、Winscope トレース ビューアをローカルでダウンロード、ビルド、実行するために必要な手順について概説します。
Winscope をローカルでビルドする
Winscope トレーサーを実行するために PC をセットアップする手順は次のとおりです。
- 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 または presubmit フック用に、簡潔な形式で単体テストを 実行します。 |
test:unit:dev |
ローカル開発用に、詳細な形式で単体テストを 実行します。このモードでは、変更が監視され、 正しいテストが自動的に再実行されます。 |
test:e2e |
クロスツール プロトコルなどのエンドツーエンド テストを 実行します。 |
test:presubmit:quiet |
CI または presubmit フック用に、 すべての presubmit 単体テスト、linter、グラフ分析を簡潔な形式で ビルドします。 |
test:presubmit |
ローカル開発用に、すべての presubmit 単体テスト、 linter、グラフ分析を詳細な形式で ビルドします。 |
test:all |
ローカル開発用に、すべてのテスト (単体テストとエンドツーエンド テスト)、linter、グラフ分析を詳細な形式で 実行します。 |
@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
を使用して protos を再ビルドします。
- Winscope はコンパイル時の proto 定義を使用するため、デフォルトでは新しいフィールドは表示されません。新しいフィールドを表示するには、