忍者ブログ

アンドロイドのあれこれ

adbコマンドでデバッグ
adb(Android Debug Bridge)とは、エミュレータまたは接続されているAndroidデバイスと通信できるように多目的なコマンドラインツールです。
詳しくはこちら: http://developer.android.com/intl/ja/guide/developing/tools/adb.html

adbコマンドはいろんな使い方がありますが、ここで自分がアプリのデバッグなどでよく使っているものを紹介します。

adb devices - 接続されてるエミュレータまたはデバイスの一覧を表示
$ adb devices
List of devices attached 
emulator-5554      device
1000cd14058f       device
HT963LF01040       device

adb logcat - ログ出力
$ adb logcat
....
D/dalvikvm(  184): GC_CONCURRENT freed 231K, 4% free 12102K/12551K, paused 4ms+5ms
W/MediaScanner(  345): Error opening directory '/mnt/sdcard/.android_secure/', skipping: Permission denied.
V/MediaScanner(  345): pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@413b7760
V/MediaScanner(  345): /pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@413b7760
D/dalvikvm(  184): GC_CONCURRENT freed 328K, 5% free 12388K/12935K, paused 6ms+7ms
D/dalvikvm(  530): GC_CONCURRENT freed 101K, 77% free 483K/2048K, paused 1ms+4ms
D/dalvikvm(  530): Debugger has detached; object registry had 1 entries
I/AndroidRuntime(  530): NOTE: attach of thread 'Binder Thread #3' failed
D/dalvikvm(  541): Not late-enabling CheckJNI (already on)
I/ActivityManager(   85): Start proc alone.advent.android.app for activity alone.advent.android.app/.MyListView: pid=541 uid=10040 gids={}
I/dalvikvm(  541): Turning on JNI app bug workarounds for target SDK version 4...
W/NetworkManagementSocketTagger(   85): setKernelCountSet(10040, 1) failed with errno -2
V/PhoneStatusBar(  141): setLightsOn(true)
I/ARMAssembler(   34): generated scanline__00000177:03515104_00009002_00000000 [148 ipp] (173 ins) at [0x412ef4b0:0x412ef764] in 883097 ns
V/TESTLOG (  541): xxxxxx
V/TESTLOG (  541): yyyyyy
D/gralloc_goldfish(  541): Emulator without GPU emulation detected.

ログメッセージにはタグとそれに関連付けられた優先度を持っています。以下はタグの優先順位、最下位から最上位を表します。
V - 冗長(最も低い優先順位)
D - デバッグ
I - 情報(デフォルトの優先順位)
W - 警告
E - エラー
F - 致命的な
S - サイレント(何も今まで印刷されないされている最高の優先度)

アプリからログを出力する
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Log.v("TESTLOG","xxxxxx");
        Log.v("TESTLOG","yyyyyy");
    }
}
$ adb logcat
....
V/PhoneStatusBar(  141): setLightsOn(true)
I/ARMAssembler(   34): generated scanline__00000177:03515104_00009002_00000000 [148 ipp] (173 ins) at [0x412ef4b0:0x412ef764] in 883097 ns
V/TESTLOG (  541): xxxxxx    ←出力されたログ
V/TESTLOG (  541): yyyyyy    ←出力されたログ
D/gralloc_goldfish(  541): Emulator without GPU emulation detected.
....
端末によってよく(みたくもない)無駄なログを流してくるので
adb logcat | grep V/
とかでは見たいログだけ出力することができます。

adb shell - デバイスまたはエミュレータにリモートシェルを実行する

adb push - ローカルからファイルまたはディレクトリをデバイスへコピーする

adb pull - デバイスからファイルまたはディレクトリをローカルへコピーする

adb install (apkファイル) - アプリをインストール
adb uninstall (パッケージ名) - アプリをアンインストール
$ adb install Myapp.apk 
2187 KB/s (1367473 bytes in 0.610s)
	pkg: /data/local/tmp/Myapp.apk
Success
....
....
$ adb uninstall project.android.myapp
Success
- 特定のエミュレータまたはデバイスにコマンドを使う
複数エミュレータまたはデバイスを接続して実行されている状態ではターゲットを指定しないといけません。方法は
adb -s <serialNumber> <command>
serialNumberってなんだ? adb devicesで確認しましょう。
$ adb devices
List of devices attached 
emulator-5554      device
1000cd14058f       device
HT963LF01040       device
このときemulator-5554、1000cd14058f、HT963LF01040がserialNumberとなります。
たとえばエミュレータのログをみたいときは
$ adb -s emulator-5554 logcat
※ここで注意
$ adb logcat -s emulator-5556 などで順番変えても使用できません。

以上
COMMENT
NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
PR
© Android Advent
powered by 忍者ツールズ / 忍者ブログ / [PR]