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 または送信前フック用に、すべての送信前単体テスト、リンタ、グラフ分析を簡潔な形式でビルドします。 |
test:presubmit |
ローカル開発用に、すべての presubmit 単体テスト、リンタ、グラフ分析をより詳細な形式でビルドします。 |
test:all |
ローカル開発用に、すべてのテスト(単体テストとエンドツーエンド テスト)、リンター、グラフ分析をより詳細な形式で実行します。 |
@IntDef のマッピングを更新
@IntDef
は、整数の有効な値を制限するために Android で使用されるアノテーションです。Winscope は、これらのアノテーションのマッピングを使用して、整数ではなく値の名前を表示します。
@IntDef
マッピングを更新する手順は次のとおりです。
アノテーション プリプロセッサを実行するための
:framework-minus-apex-intdefs
をビルドします。mp :framework-minus-apex-intdefs
生成された
intDefMapping.json
ファイルを prebuilts リポジトリにコピーします。$ 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 ファイルの 1 つに新しいフィールドを追加しました。表示するにはどうすればよいですか?
- Winscope はコンパイル時の proto 定義を使用するため、デフォルトでは新しいフィールドは表示されません。新しいフィールドを表示するには、
npm run build:protos
を使用してプロトを再ビルドします。
- Winscope はコンパイル時の proto 定義を使用するため、デフォルトでは新しいフィールドは表示されません。新しいフィールドを表示するには、