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”
…....待续