ADB : Android Debug Bridge. 用来调试mobile phone的工具。
最常见的功能,是查看日志。 ^_^
使用之前,务必确保 android 启动了开发者模式
1.adb push/pull (对于 huawei mate: $ adb push xx.apk /storage/sdcard0 ,然后就可以手动打开手机的文件夹,根目录下就会发现apk文件了)
2.adb shell
shell 的主要命令: logcat- logcat, 可以看到android中的输出。 这个非常重要,我们单独说:
- dumpsys: 保存系统的数据.
- dumpstate: 保存系统的状态
- dmsg (debug kernel message)
- start/stop
只要是在Android 的java代码中,使用了 Log.d() 的语句,就会保存LOG信息, 就可以通过 adb shell logcat
来读取。
verbose/debug/information/warning/error 总共有5种形式。
$ adb shell (进来后,你会发现, Android下支持 df, ls, ll , top, ps, cat ,echo, touch 等 大部分Linux命令。)
/> logcat
然后就会发现,打印出来的都是实时的log. (都是 /dev/log下 )
shell@android:/ $ logcat
--------- beginning of /dev/log/main
D/wpa_supplicant( 444): wpa_s 0x40f4d7a8 cmd SIGNAL_POLL
D/wpa_supplicant( 444): RX ctrl_iface - hexdump(len=11): 53 49 47 4e 41 4c 5f 50 4f 4c 4c
D/wpa_supplicant( 444): nl80211: survey data missing!
D/wpa_supplicant( 444): ctrl_iface: SIGNAL_POLL
D/wpa_supplicant( 444): wpa_s 0x40f4d7a8 cmd SIGNAL_POLL
D/wpa_supplicant( 444): RX ctrl_iface - hexdump(len=11): 53 49 47 4e 41 4c 5f 50 4f 4c 4c
D/wpa_supplicant( 444): ctrl_iface: SIGNAL_POLL
D/wpa_supplicant( 444): nl80211: survey data missing!
E/BatteryService( 348): set value: false
E/BatteryService( 348): set value: true
E/BatteryService( 348): set value: true
--------- beginning of /dev/log/system
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
日志在刷刷刷的滚动啊~!
上面打印的都是 /dev/log
下的文件, 现在看来,有这么几个文件:
shell@android:/dev/log $ ls -al
crw-rw-rw- root log 10, 47 2015-04-11 14:08 events
crw-rw--w- root log 10, 44 2015-04-11 14:08 exception
crw-rw--w- root log 10, 48 2015-04-11 14:08 main
crw-rw--w- root log 10, 46 2015-04-11 14:08 radio
crw-rw--w- root log 10, 45 2015-04-11 14:08 system
比较奇怪的是, 10, 47, 10, 44 并不是文件的大小, 我们使用 cat 命令可以查看,但是看到的却是部分乱码. 应该是android 直接把日志给压缩了? 不清楚。 所以还是建议用 logcat grep
来查看。
PushLogAC2317[ReceiverDispatcher-45]PushState get action :com.huawei.intent.action.PUSH(pushagent/null:PushLogAC2317[ReceiverDispatcher-45]enter ConnectMgrProcessor:onReceive(intent:Intent { act=com.huawei.android.push.intent.MSG_SENT (has extras) } context:com.huawei.android.pushagent.PushService@41e84328(puPushLogAC2317[ReceiverDispatcher-45]enter AlarmTools:setDelayAlarm(intent:Intent { act=com.huawei.android.push.intent.HEARTBEAT_RSP_TIMEOUT (has extras) } interval:10000ms, context:com.huawei.android.pushageAlarmManagerWakeup alarm[0] {2015 4 月 11 14:50:10 +0800} (com.huawei.android.pushagent) repeatInterval: 0w(�PB�(U��PushLogAC2317[ReceiverDispatcher-45]PushState get action :com.huawei.android.push.intent.MSG_SENT(pushagent/null:-1)J�xx�(UBFdalvikvmRefusing to reopen boot DEX '/system/framework/hwframework.jar'��xx�(U���
对日志的一点儿解释:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
I 表示是information 级别, ActiviryManger 就是在log时设置好的。可以认为是类名。
- logcat *:E : 只显示 error 和以上级别的log
- logcat MyClass:I : 只显示跟MyClass 相关的内容, 最低级别是I
注意: logcat Class:I
在我的机器上(4.1 华为mate1 ) 不起作用。
解决办法1 : (在 adb shell 中操作)
$ adb shell
/>logcat -s "browser","webkit"
解决办法2: ( 这里是在linux console 中操作)
$ adb shell logcat grep xxoo
active manager
/> am start -a android.intent.action.VIEW
package manager/> pm install/uninstall com.example.MyApp
/> pm list packages com.happysoft # => 列出所有包含 com.happysoft的package
录像/> screenrecord /sdcard/demo.mp4
# 先进入 adb shell
$ adb shell
# 下面的内容相当于直接运行在手机中:
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Ctrl-C to stop)
shell@ $ exit
# 把刚才录制的视频, 从手机拉出来.
$ adb pull /sdcard/demo.mp4
ADB 也可以通过无线来连接。 具体略。
共同学习,写下你的评论
评论加载中...
作者其他优质文章