Android アプリを開発していて, 現在の Activity の Stack の状態を確認したいときにどうするかをメモしました.
今回は (いつもの Mac ではなく) Windows で作業しています.
What is “ADB” ?
ADB ( Android Debug Bridge ) は, Google の Android SDK に含まれているコマンドラインユーティリティです. ADB は USB接続された実機を コンピュータからコントロールでき, ファイルをコピーしたり アプリを[アン]インストールできたり, shellコマンドを走らせたり いろんな事ができます.
Xamarin から Android アプリをビルドしたときも, 裏側で ADB を用いてデバイスに接続しています
To test whether ADB is working properly
現在利用可能なデバイス (エミュレータや実機) の一覧を確認するコマンドです.
これを叩くと List of devices attached が表示されます
List of devices attached
0123456789ABCDE device
ここで offline と表示されてしまったら, うまくいっていないので, やり直しましょう
What’s the ADB shell “dumpsys” tool ?
dumpsys コマンドは システムサービスの状態をダンプしてくれます.
で 様々な情報が得られるのですが, あまりに情報量が多過ぎる (実行すると ダーって止まらなくなる)
(参考: android / platform/frameworks/native / master / . / cmds / dumpsys / dumpsys.cpp )
ので, grep (Windows だと find) します.
> adb shell dumpsys | find "DUMP OF SERVICE" DUMP OF SERVICE DeviceManager3LM: DUMP OF SERVICE OemExtendedApi3LM: DUMP OF SERVICE SurfaceFlinger: DUMP OF SERVICE accessibility: DUMP OF SERVICE account: DUMP OF SERVICE activity: (中略) DUMP OF SERVICE battery: (以下略. 全部で95個あった)
これら95個のサービスが dumpsys で扱えるよ, ということです.
たとえば, バッテリーの状態が知りたかったら以下のように叩きます
> adb shell dumpsys battery Current Battery Service state: AC powered: false USB powered: true Wireless powered: false status: 2 health: 2 present: true level: 98 scale: 100 voltage: 4323 current now: 244620 temperature: 321 technology: Li-ion
使い方の例
> adb shell dumpsys activity > adb shell dumpsys cpuinfo > adb shell dumpsys battery
To dump Activity stack
現在の Activity のスタックの状態を確認するには,
で, いけます.
ただ, これだとあまりに情報量が多いので, またよしなに grep して叩きます.
まず, Android機を起動してすぐのホーム画面で叩いた時
> adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2}
まだ Activity stack は1つだけですね
次にTwitterアプリを開きました.
// 私は訓練されたツイ廃なので, スマホを開いたら常にTwitterを開く癖がついています.
> adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111}
ひとつ増えましたね.
com.twitter.android/.MainActivity というActivityです
そのまま, Twitterアプリのなかで, TLからひとつツイートを選んで 詳細を表示させます.
> adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111}
MainActivity の上に RootTweetActivity という Activity がひとつ増えました.
あと Run# の番号もひとつ増えました.
OSのシステムのActivity(なのかな?)の com.sonyericsson.home/com.sonymobile.home.HomeActivity は, つねに一番上にあるんですね.
次に, その開いたツイートにはリンクがついていたので, リンクを開きます.
> adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #2: ActivityRecord{3410ecf0 u0 com.twitter.android/.browser.BrowserActivity t111} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111}
browser.BrowserActivity がひとつ増えました.
こんなふうに, Activity の Stack の状態を確認できるんですね
> adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} > adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111} > adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111} > adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #2: ActivityRecord{3410ecf0 u0 com.twitter.android/.browser.BrowserActivity t111} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111} > adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #2: ActivityRecord{3410ecf0 u0 com.twitter.android/.browser.BrowserActivity t111} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111} > adb shell dumpsys activity | find “Run #“ Run #0: ActivityRecord{34163328 u0 com.sonyericsson.home/com.sonymobile.home.HomeActivity t2} Run #3: ActivityRecord{4640d310 u0 android/com.android.internal.app.ChooserActivity t111} Run #2: ActivityRecord{3410ecf0 u0 com.twitter.android/.browser.BrowserActivity t111} Run #1: ActivityRecord{340f1230 u0 com.twitter.android/.RootTweetActivity t111} Run #0: ActivityRecord{34ffd220 u0 com.twitter.android/.MainActivity t111}
( ゚ε゚;)むむむずかしい( ̄▽ ̄;)