起動されているアクティビティを特定する
ソースは手元にあるが設計書が手元にない、なんてことはよくある話。
私の尊敬する某プログラマが「コードとは設計である」という発言をしていて、
然なりと思うのだけれど、設計に足りうるコードになっていればの話。
それでも設計書がなくてもアクティビティを特定しなければならないことがある。
設計書がなくても、手っ取り早くアクティビティを調べることができる。
たとえば、Messagingのsettingsアクティビティがどこにあるかを調べたいとする。
(Messagingのコードがよくないと言っているのではない。例である。)
logcatからアクティビティを特定
コマンドプロンプトからlogcatコマンドの出力、
findstrコマンドで"ActivityManager"をフィルタする。
Windowsの場合はfindstrコマンドを使う。
Linuxの場合はgrepコマンドを使う。
adb logcat -c adb logcat -v time | findstr "\/ActivityManager"
実行結果
05-25 04:07:02.886 I/ActivityManager( 360): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.mms/.ui.ConversationList} from pid 519 05-25 04:07:05.096 I/ActivityManager( 360): Displayed com.android.mms/.ui.ConversationList: +1s517ms 05-25 04:07:09.026 I/ActivityManager( 360): START u0 {cmp=com.android.mms/.ui.MessagingPreferenceActivity} from pid 834 05-25 04:07:12.066 I/ActivityManager( 360): Displayed com.android.mms/.ui.MessagingPreferenceActivity: +2s941ms
"com.android.mms.ui.MessagingPreferenceActivity"が起動されていることがわかる。
public class MessagingPreferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener {
Hierarchy View(階層ビュー)
Hierarchy View を使えば、ビューの構成がわかる。
id が表示されるので、関連するコードを特定できる。
ただし、root取得していないと実行できない。
Hierarchy View の基本的な使い方については、解説されている記事がいくつもあるので、ここでは書かない。
uiautomatorviewer
uiautomatorviewerを使っても調べることができる。root不要。
Android-SDK を展開したディレクトリの tools にある uiautomatorviewer を実行すると起動する。
dumpsys
dumpsysでも調べることができる。root不要。
adb shell dumpsys activity top
関連記事
まだありません。