工欲善其事必先利其器,在Android开发过程中,为了开发调试,查找问题的需要,必须掌握一些常用的命令的用法,这里总结了一些在Android开发中经常会用到的命令,一共15个。
1、ps
列出所有的进程
这个命令是Android调试和问题查找的时候经常会用到的一个命令,在不带参数的情况下会输出所有的进程,
ps -t
则会输出所有的线程。
2、printenv 显示环境变量,例:
printenv HOSTNAME
printenv BOOTCLASSPATH
3、 setprop 设置系统属性,和环境变量不是一个概念,例:
setprop ctl.stop zygote
setprop ctl.start zygote
setprop persist.sys.usb.config adb
4、 getprop 获取系统属性,不带参数显示所有属性,例:
getprop sys.usb.config
5、 watchprops 监听系统属性的改变当系统属性发生改变时输出改变的系统属性。
6、 start 启动服务,它的作用相当于:
setprop ctl.start
7、 stop 停止服务
带参数时,它的作用相当于
setprop ctl.stop
不带参数的作用相当于:
setprop ctl.stop zygote
setprop ctl.stop surfaceflinger
9、 sync 同步命令,将缓存中的数据写入到存储设备。
对于块设备,默认在挂载的时候都会开启写缓存11 kill
kill命令不仅仅可以干掉一个进程,还可以发信号给进程,如:
kill -3
touch /data/anr/traces.txt
chmod 666 /data/anr/traces.txt
因为/data/anr是system权限的,如果在执行kill之前不执行上面这两条命令,如果kill的是一个普通用户进程,那么就会因权限问题而无法输出堆栈信息到traces.txt了。
再如: kill -9
发送SIGKILL给进程,用于强制结束进程,包括僵死的进程。
12、debuggerd 用于输出进程的native堆栈
用法: debuggerd -b
13、 dumpsys 用于调试service
在使用的时候,往往用
dumpsys -l
查看所有的系统服务,再通过类似:
dumpsys cpuinfo
13、 netcfg 查看或者设置当前网络连接状态,不带参数的情况输出所有的已知网络连接状态,也可以用来设置动态ip,或者关闭打开网络连接,如:
获取动态ip:
netcfg eth0 dhcp
netcfg eth0 down
netcfg eth0 up
14、 screencap 截屏
例,保存当前屏幕为png图片到/mnt/sdcard/screen.png:
screencap -p /mnt/sdcard/screen.png
显示帮助信息:
screencap -h
15、strace 用于跟踪系统调用,这是一个强大的调试命令,这里只作下简单介绍,更详细的可以参考:http://blog.chinaunix.net/uid-26285146-id-3944345.html
strace -f -p
-p
指定要跟踪的进程pid
-f
跟踪子进程
这里只介绍了Android中独有的或者经常用到但是容易忽视的命令,一些大家都知道的,像am,pm,logcat这些命令这里没有讲到,另外,还有很多的linux命令这里也没有介绍到,因为已经超出了本篇文章的范围了。