PCに接続された単一のAndroidデバイスがあり、logcat情報を表示する複数のシェルを開きました。特定のフィルターを使用して実行しているすべての人。だから私の質問は今、それらのフィルターはどこに適用されますか?すでに電話に出ているので、フィルタリングされたメッセージだけがUSB経由で送信されます。または、adbサーバーまたはクライアントのPCに適用されていますか?bandwitdhが制限されているため、フィルタリングされていない複数のlogcatストリームがUSB上で同時に実行されるのを防ぎたいだけです。ありがとう
5 に答える
logcat
データは、デバイスのコマンドを使用してカーネルバッファから取得されます。実行した場合
% adb logcat -\?
「filterspecs」の説明を含む使用法情報を見ることができます。これらは、コマンドラインで設定するか、を設定することで設定できますANDROID_LOG_TAGS
。例えば:
% adb logcat '*:W'
警告またはエラーレベルのメッセージのみが表示されます。
ここでの秘訣は、環境変数をデバイスに伝播するという追加のボーナスを伴う、adb logcat
単なる省略形です。フィルタリングはコマンドによって実行されます。このコマンドは、テキスト出力をadbにダンプするだけです。コマンドからの出力は特別な扱いを受けません。adb shell logcat
ANDROID_LOG_TAGS
logcat
logcat
したがって、あなたの質問に対する答えは次のとおりです。フィルタリングはデバイス上で、ウィンドウごとに個別に行われます。
DDMSの動作は異なります。
または、adbサーバーまたはクライアントのPCに適用されていますか?
これらは、LogCat情報を提示しているアプリケーションによって適用されます。
現在、異なるデバイスで同じビルドを実行することはできません。uビルドが異なる場合は、デバイス名またはバージョンに応じてフィルターを適用できます。
Uがこれをやりたいので、それはいくつかのトリックによって達成されるかもしれません。
Log.v(LOG_TAG,"message");
LOG_TAGでデバイスIDを追加します。これは、TelephonyManagerで識別できます。
そしてそれを使ってフィルターを追加します。
Android は、デバイスのログ情報を 4 つの異なるバッファ (イベント ログ、システム ログ、無線ログ、メイン ログ) に保存します。その後、adbd
デーモンはこの情報にアクセスしてクライアントに送信できます。したがって、電話ではすべての情報が保存されているため、クライアント側でのみ情報をフィルタリングできます。
フィルターは電話に適用されます。そのため、存在しない logcat タグのフィルターを入力すると、トラフィックは USB を通過しません。ただし、cmd シェルで開かれた各 logcat は、合計トラフィックを増加させる新しいストリームを作成します。