起動されているアクティビティを特定する

ソースは手元にあるが設計書が手元にない、なんてことはよくある話。
私の尊敬する某プログラマが「コードとは設計である」という発言をしていて、
然なりと思うのだけれど、設計に足りうるコードになっていればの話。
それでも設計書がなくてもアクティビティを特定しなければならないことがある。

設計書がなくても、手っ取り早くアクティビティを調べることができる。


たとえば、Messagingのsettingsアクティビティがどこにあるかを調べたいとする。
(Messagingのコードがよくないと言っているのではない。例である。)

f:id:incesticide:20140525175345p:plain

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 を使えば、ビューの構成がわかる。

f:id:incesticide:20140525175403p:plain

id が表示されるので、関連するコードを特定できる。

ただし、root取得していないと実行できない。

Hierarchy View の基本的な使い方については、解説されている記事がいくつもあるので、ここでは書かない。

uiautomatorviewer

uiautomatorviewerを使っても調べることができる。root不要。

Android-SDK を展開したディレクトリの tools にある uiautomatorviewer を実行すると起動する。

dumpsys

dumpsysでも調べることができる。root不要。

adb shell dumpsys activity top

関連記事

まだありません。