Android のドキュメントによると、各 DVM には接続する JDWP ポートがあります (正確には JDWP プロトコルではありませんが、ほとんどの JDWP 機能を実装しています)。したがって、ADB を使用してアタッチできます。
また、同じドキュメントによると、DDMS は DVM ごとに 1 つの JDWP と 1 つの JDWP ベース ポート (8700) を提供します。
私の質問は次のとおりです。両方のオプションの長所と短所。
ありがとう
デバイス上のすべてのデバッグ可能な VM には、ADB への接続があります。DDMS は ADB と通信して VM のリストを取得し、ADB を使用して VM と通信します。
DDMS は VM ごとに個別の TCP ポートでリッスンするため、デバイス上の任意の VM に「直接」接続できます。さらに、便宜上、ポート 8700 でリッスンし、UI で現在選択されている VM に接続をルーティングします。Eclipse、IntelliJ、jdb、jswatなどで「デバッグリモートVM」を使用してそのポートに接続できます。
接続されると、JDWP プロトコルは、通信に使用される基本的なパケット形式 (つまり、パケットの種類と長さのエンコード方法) を定義します。DDMS は JDWP を拡張し、その目的のために新しいパケット形式を定義します。DDMS メッセージとデバッガー メッセージはインターリーブできます。
ここには 2 つのオプションはありません。デバッガーは DDMS と通信し、DDMS は ADB と通信し、ADB は VM と通信します。デバッガーと VM は JDWP を話し、DDMS はそれを少し拡張して、同じ通信チャネルを共有できるようにします。
元の DDMS 設計ドキュメントは、dalvik docsにあります。少し古くなっています (そして、何らかの理由でイタリック体でフォーマットされています) が、本質的な詳細は変更されていません。