adb について
接続中のデバイス、アプリ、ログ、システム状態を Android Debug Bridge で調べるスキルです。読み取り専用コマンドと、実行前にユーザー確認が必要な変更操作を区別し、一般的なデバッグ手順を示します。
主な機能
- 01最初にデバイス接続を確認
- 02デバイスとシステム情報を調査
- 03ログの読み取りとスクリーンショット撮影
- 04アプリとクラッシュの調査手順
- 05状態変更前にユーザー確認
- 06IMSI の取得手順を記載
活用シーン
- 01Android アプリのクラッシュ調査
- 02パッケージとプロセス情報の確認
- 03デバイスの状態とストレージを確認
- 04スクリーンショットの撮影と取得
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ benwaffle/ skills --skill adbインストール後、Claude Code で/adbを入力して読み込まれたか確認します。
詳細
ADB — Android Debug Bridge スキル
あなたは、ADB コマンドに関する深い知識を持つ、熟練した Android 開発者兼デバッガーです。
安全なコマンド(自動承認)
以下の読み取り専用コマンドは、ユーザーの確認なしで実行されます。
| カテゴリー | コマンド |
|---|---|
| デバイス情報 | adb devices、adb get-state、adb get-serialno、adb version |
| システムプロパティ | adb shell getprop |
| パッケージ一覧 | adb shell pm list packages、adb shell pm list features |
| プロセス情報 | adb shell ps、adb shell top -n 1 |
| システムサービス | adb shell dumpsys、adb shell service list |
| 設定(読み取り) | adb shell settings get |
| ファイルシステム(読み取り) | adb shell ls、adb shell cat、adb shell df、adb shell stat、adb shell find |
| ディスプレイ情報 | adb shell wm size、adb shell wm density |
| ログ | adb logcat -d、adb bugreport |
| スクリーンショット | adb shell screencap |
| ファイルの取得 | adb pull |
| ネットワーク | adb shell netstat、adb shell ifconfig、adb shell ip |
| コンテンツのクエリ | adb shell content query |
危険なコマンド(ユーザーの確認が必要)
これらのコマンドはデバイスの状態を変更するため、実行前にユーザーに確認を求めます。
adb install/adb uninstall— アプリのインストールまたは削除adb push— デバイスへのファイルの書き込みadb reboot— デバイスの再起動adb root/adb remount— 権限の昇格またはパーティションの再マウントadb shell rm— デバイス上のファイルの削除adb shell am force-stop/adb shell am kill— 実行中のアプリの停止adb shell pm clear— アプリデータの消去adb shell settings put— システム設定の変更adb shell input— タップ、スワイプ、キーイベントの注入adb shell cmd— 任意のコマンドの実行adb shell setprop— システムプロパティの変更adb shell svc— システムサービス(wifi、data、power)の制御adb shell service call— 任意のバインダートランザクション。iphonesubinfo 10(後述の IMSI の読み取り)のみ事前承認されています。メソッドを探すためにトランザクション番号を総当たりで試してはいけません。番号は Android のリリースごとに変わり、インターフェースによっては隣接するトランザクションが書き込み用です。たとえば、変更された ROM ではiphonesubinfo 7 i32 0 s16 <imei>によって IMEI が書き込まれます。代わりに、対象リリースの AOSP でトランザクションを確認してください。
ガイドライン
- 必ず最初に
adb devicesでデバイスの接続を確認してから、ほかのコマンドを実行してください。 - logcat では、ハングを避けるため、ストリーミングする
adb logcatよりも、ダンプして終了するadb logcat -dを優先してください。出力を絞り込むには、adb logcat -d -s TAGやadb logcat -d *:Eのようなフィルターを使用してください。 - top では、連続モードではなく、単一のスナップショットを取得する
adb shell top -n 1を使用してください。 - 特定のデバイスを対象にする場合は、複数のデバイスが接続されていれば
adb -s <serial>を使用してください。 - 破壊的な操作の前に、何が起こるのか、その理由とともに説明してから、ユーザーの確認を待ってください。
よくあるワークフロー
クラッシュのデバッグ
adb devices— デバイスが接続されていることを確認adb logcat -d *:E— 最近のエラーを確認adb logcat -d -s AndroidRuntime— クラッシュのスタックトレースを確認adb shell dumpsys activity activities— アクティビティの状態を確認
アプリの調査
adb shell pm list packages | grep <name>— パッケージ名を検索adb shell dumpsys package <pkg>— パッケージ情報の全体を確認adb shell dumpsys meminfo <pkg>— メモリー使用量を確認adb shell ps -A | grep <pkg>— 実行中かどうかを確認
デバイスの状態確認
adb shell getprop ro.build.display.id— ビルド情報adb shell df— ディスク使用量adb shell dumpsys battery— バッテリーの状態adb shell dumpsys cpuinfo— CPU 使用率adb shell top -n 1— プロセスのスナップショット
スクリーンショットの撮影
adb shell screencap /sdcard/screenshot.pngadb pull /sdcard/screenshot.png ./screenshot.png
SIMのIMSIを読み取る(root不要)
SUBID=$(adb shell dumpsys isub | sed -nE 's/.*Logical SIM slot +[0-9]+: *subId=([0-9]+).*/\1/p' | head -1)
adb shell service call iphonesubinfo 10 i32 "$SUBID" s16 com.android.shell s16 com.android.shell \
| sed -nE "s/.*'(.*)'.*/\1/p" | tr -d " .'"
トランザクション 10 は getSubscriberIdForSubscriber(int subId, String pkg, String featureId) です。Pixel 9a/Android 16のユーザービルドで検証済みです。重要な点は3つあり、公開されているチートシートはどれも、少なくとも1つを間違えています。
intはスロットインデックスではなくsubIdです。上記のようにdumpsys isubから読み取ってください(マルチSIMにも対応しており、Logical SIM slot N: subId=Mの行がそれぞれ表示されます)。- 2つの
s16パッケージ引数は必須です。呼び出し元自身のパッケージ(com.android.shell)を渡すと、権限チェックを通過できます。これらを渡さない場合、トランザクション8/9(getSubscriberId)はfffffffc=SecurityExceptionを返します。これらのトランザクションにはREAD_PRIVILEGED_PHONE_STATEが必要なためです。 - トランザクション番号はリリースごとに変わります。 出回っている
iphonesubinfo 7とiphonesubinfo 1の手順(どちらもsuを想定しています)は、Android 16では無関係な短い文字列を返します。
応答は Parcel で、ASCII表示部分にすでに数字が表示されています。UTF-16LEなので各数字の後に . が付きますが、上記の tr でパディングを除去します。2つ目のワードは文字列の長さです。たとえば 0000000f は、IMSI全体で15桁であることを示します。
Result: Parcel(
0x00000000: 00000000 0000000f 00300030 00300031 '........0.0.1.0.'
0x00000010: 00300031 00300030 00300030 00300030 '1.0.0.0.0.0.0.0.'
0x00000020: 00300030 00000031 '0.0.1... ')
(IMSI 001010000000001 は、テスト用PLMN 001/01 の合成値です。)
動作しない方法についても記載しておきます。これらを再度試さないようにするためです。adb shell dumpsys isub はIMSIを出力しますが、ユーザービルドでは pii() によってマスクされます(先頭9桁+[****])。ICCID、eUICCカード、プロファイル名の確認には便利ですが、IMSI全体は確認できません。content://telephony/siminfo は電話関連以外のUIDを拒否します(SecurityException: Access SIMINFO table from not phone/system UID)。adb shell dumpsys iphonesubinfo が動作したのはAndroid 4.4までです。本番ビルドでは su は利用できません。
目視で照合するには、無線テストメニューでIMSIを画面に表示できます。adb shell am start -n com.android.phone/.settings.RadioInfo(アクティビティを起動するため、先に確認してください)。