一、命令篇

内存查看:

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

 

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

root@android:/ # getprop
[dalvik.vm.heapgrowthlimit]: [192m] :进程最大可分配到192m 如果哪个进程超过这个值就会发生OOM问题。
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [2m]
[dalvik.vm.heapsize]: [256m] :单个虚拟机可分配的最大内存=256m 
[dalvik.vm.heapstartsize]: [8m]

 

² 查应用进程占用内存分布:

root@android:/ # dumpsys meminfo

 

² 查指定进程占用内存情况,比如电话进程

root@android:/ # dumpsys meminfo | grep phone

 

² 查指定几个进程占用内存情况,比如电话进程、电话本进程、信息进程

root@android:/ # dumpsys meminfo | grep -E "phone|mms|contacts"

 

内存泄露分析:

   

 

AM调试:

 

² 模拟发送广播:通过命令行执行adb shell am broadcast发送广播通。这个在调试的时候常用到。

adb shell am broadcast 后面的参数有:

[-a <ACTION>]
 [-d <DATA_URI>]
 [-t <MIME_TYPE>] 
 [-c <CATEGORY> [-c <CATEGORY>] ...] 
 [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] 
 [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] 
 [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] 
 [-n <COMPONENT>]
 [-f <FLAGS>] [<URI>]

 

例如:adb shell am broadcast -a com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true说明:蓝色为key,红色为alue,分别为String类型,int类型,boolean类型

 

² Android AM命令行启动程序的方法


 

ADB命令调试

版本机器:

  adb remount  重新挂载文件系统 

把Phone.apk从手机中取出来放到G盘。如果需要反编译别人机器的apk,可以这样取出来。

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

查找phone进程的pid

杀掉phone进程

 

版本机器:

ROOT,root成功率很高。

进入shell

获取Root权限

给指定目录赋予读写权限,然后可以更改这个目录                      里面的文件。

 

抓取LOG

² Adb logcat   

 

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

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

events — 查看事件相关的消息

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

 

常用的打印方法有:

-v time 打印时间

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

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

-f 文件名

 

 

CPU /THREAD查看

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

root@android:/ # top -t

AndroidJUnit4 调试so 安卓调试命令_内存泄露

cpu的情况。这个数据在分析一些cpu使用高的问题时很好用。


欢迎大家补充。