android在开发者模式下,我们能够使用adb执行andorid设备上system/bin/目录下的几乎所有命令。这些命令有的和linux的原始命令功能一样,有些是android独有的,有些是平台添加的。但他们无一例外,功能都相当强大。熟练使用这些命令,可以有效的减少程序调试的工作量。

adb

adb devices  列出当前连接到pc的android设备

adb -s <serialNumber> <command>   当连接到当前pc的android设备大于1个时,可以使用此命令给特定的android设备发送指令

adb root 给adb赋予root权限

adb remount 重新挂载文件系统

adb kill-server      结束adb服务

adbstart-server    选择服务是否启动adb服务

adb install<path_to_apk>  从pc安装软件到android设备

adb uninstall

adb pull system/app/Phone.apkc:/ 把Phone.apk从手机中的system/app中取出来放到c盘。如果需要反编译别人机器的apk,可以这样取出来。

adb push.../Phone.apk system/app 把修改后的Phone.apk放入手机,放入以后需要让phone进程重启一次。

adb shell ps | grepphone 查找phone进程的pid

adb shell kill pid 杀掉phone进程

adb reboot    重启android设备

adb rebootbootloader    重启进入fastboot模式

adb rebootrecovery     重启进入recovery模式

adb logcat

android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用-b 选项,以下是可以指定的缓冲区:

radio — 查看包含在无线/电话相关的缓冲区消息

events — 查看事件相关的消息

main — 查看主缓冲区(默认缓冲区)

常用的打印方法有:

-v time 打印时间

-c 清理缓冲,在打印log之前可以先执行一次清理,可以减少无效log。

-s LOG_TAG 打印指定的LOG_TAG 对应的log

-f 文件名 将日志输出到文件

adb bugreport    获取bugreport log

#cat /proc/kmsg  或者dmesg  查看内核log信息

cpu/thread查看

查看当前应用有多少个线程在跑,每个线程cpu使用情况如何。如果程序写的有问题,开启了一些线程在后台跑却从未释放,可能给程序带来严重的影响。一般在分析一些cpu使用高的问题时很好用。

#top -t

am

am指令可以发送广播,可以启动activity,可以启动服务,同时还能在特定的窗口关闭他们。因此对于UI调试和模块交叉调试十分有用,一是对于一些不设置launcher的动作的activity,没有办法通过菜单启动,这时可以使用am指令,二是对于一些需要参数才能运行的activity,直接运行可能出错或者无法调用其功能,需要am来启动。三是在一些launcher和屏幕锁窗口,没有办法直接调用其他程序,但其他程序又会在特定条件下在这些窗口启动,为了测试他们交互运行情况,需要am指令。四对于一些在特定某些广播下运行的服务,活动,广播接收器来说,调试难度很大,使用am可以轻松解决。五对于一些窗口调用出错的程序,也可以通过am指令来验证是发送出错还是接收出错。

#am start -ncom.android.music/com.android.music.MusicBrowserActivity  启动某Activity
#am start -aandroid.intent.action.CALL -d tel:10086  拨号
#am start -aandroid.intent.action.VIEW -d  http://www.baidu.com/  打开网页
#am broadcast -aandroid.intent.action.BOOT_COMPLETED  发送广播
#am startservicecom.android.music/.MediaPlaybackService  启动服务
pm
使用pm命令可以列出手机上安装的apk与对应的软件包,由于使用命令删除apk时,需要知道包名,通过这条命令加上grep或者find就能找到需要的软件的包名
#pm list packages -f
找出对应包的安装目录路径,两条指令结合,可以知道要拷贝给别人的软件位于手机什么地方
#pm pathcom.android.music
可以列出使用的权限
#pm listpermission-groups
#pm list permissions
sqlite3
#sqlite3data/data/com.android.settings/databases/ProfileProvider.db
SQLite version3.6.22
Enter".help" for instructions    查看帮助
Enter SQL statementsterminated with a ";"
sqlite>
常用命令
sqlite>.tables  查看数据库中所有表
sqlite>.modeline  一行一个值输出查看结果
sqlite>select *from profiles;  查看表中所有字段及值
sqlite>.quit  或者 sqlite>.exit  退出sqlite命令行

内存查看

使用场景:跟踪进程内存使用情况,看是否存在内存回收不了的问题,如果程序存在内存泄露问题,通过内存动态占用情况可以看出一些端倪。

查看系统dalvik给每一个进程分配的可用内存情况:

#getprop  获得当前设备的属性
[dalvik.vm.heapgrowthlimit]:[192m] :进程最大可分配到192m 如果哪个进程超过这个值就会发生OOM问题。
[dalvik.vm.heapsize]:[256m] :单个虚拟机可分配的最大内存=256m
dumpsys
meminfo 显示内存信息
cpuinfo 显示CPU信息
account 显示accounts信息
activity 显示所有的activities的信息
window 显示键盘,窗口和它们的关系
wifi 显示wifi信息
查应用进程占用内存分布:
#dumpsys meminfo
#procrank
#procrank |busyboxgrep -E "phone|mms|contacts"  查看指定进程的内存占用情况
每隔10秒输出一次music进程内存占用情况(脚本)
#!/bin/bash
while true;do
adb shell procrank |grep com.android.music
sleep 10
done
#df
查看分区使用情况
# busybox du -h -d 1system/  查看system目录下子目录占用情况
#mount 查看分区挂载信息

PS:

还有一个强大的busybox工具,就不列了,命令太多了,不一一列出了,在使用过程中不知道怎么使用的,千万别忘记“help”

…....待续