読者です 読者をやめる 読者になる 読者になる

非rootなAndroid端末でHierarchy Viewerを使う方法

Android SDKにはUI Viewの階層を確認することが出来るHierarchy Viewerというツールが入っています。このツールはrootedな端末かエミュレータでないと動作しません。最近はrootedでなくとも動くというという記述をいくつか見つけましたが、自分の環境(Nexus 5、MacBook AirAndroid Studio)ではうまく動作しませんでした。おそらく私が使い方を間違えてる可能性が濃厚ですが…

というわけで何か代替法はないかと探してみたところ、ViewServerというものを見つけました。これを使ってみたところ、自分の環境でもHierarchy Viewerが動作しましたので、手順をまとめておきます。

作業環境

導入

導入はとても簡単です。

まずは、ここから適当にクローンし、viewserver/src/main/java/com/android/debug/hv/ViewServer.javaを自分のプロジェクトにコピーすることで導入は完了です。本当はgradleを使って管理した方が良いと思いますが、とりあえず動作させるだけであればViewServer.javaを自プロジェクトにコピーするだけで動きます。

準備

ViewServerを動作させるためにソースコードを少しだけ修正する必要があります。

この辺はサンプルコードを見たら分かりますが、一応。

アプリケーションを起動した際に一番最初に起動されるエントリーポイントとなるActivityに以下の記述を追加してください。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ViewServer.get(this).addWindow(this);
}

@Override
protected void onResume() {
    super.onResume();
    ViewServer.get(this).setFocusedWindow(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    ViewServer.get(this).removeWindow(this);
}

Hierarchy Viewerの起動

USBで端末を繋いだら一応確認として以下のコマンドを実行します。

$ adb devices

繋いでいる端末が表示されればOKです。

以下のコマンドでHierarchy Viewerを起動することが出来ます。 パスは擬似的に書いていますので、適宜読み替えてください。

$ cd sdk/tools
$ ./hierarchyviewer

あとは、アプリを選択してLoad View Hierarchyを押せばOKです。

参考サイト