adb 命令相信大家都经常使用,但是很多安卓开发者只是用了安装卸载,其实adb 还有很多强大的功能
adb 查看应用包名
很多时候我们去逆向人家的APK,都能知道包名,或者很多时候要利用APK包名搞些事情就可以使用adb
adb shell pm list packages
使用以上命令就可以查看我们设备上所有应用的包名,如果想知道应用对应的apk文件在手机上的安装位置则可以在上面的命令后加-f参数
adb shell pm list packages -f
如果配置了aapt可以使用下面的命令,如果没配环境,直接在aapt目录下
没有apk,应用已经安装到手机或虚拟机中
启动logcat,使用命令
adb logcat ActivityManager:I *:s
然后启动应用,这个时候 logcat会出现下面的:
image.png
so.ofo.labofo
com.xiaoniu.finance 都是应用启动的包名
adb 查看内存 adb shell dumpsys meminfo 使用
adb shell dumpsys meminfo 包名
这里我直接拿淘宝的应用了,如下:
image.png
我们重点看下下面几个参数:
image.png
allocated是分配了的内存,对应的左边分别是native和dalvik 两个地方
Heap Size :代表最大总共分配空间
Heap Alloc :已经分配的内存空间
mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。
Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。
Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。
Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。
Dalvik Heap Size 约等于Dalvik Heap Alloc + Dalvik Heap Free
OtherPss, include Cursor,Ashmem, Other Dev, .so mmap, .jar mmap, .apk mmap, .ttf mmap, .dex mmap, Other mmap, Unkown统计信息都可以在process的smap文件看到。
Objects and SQL 信息都是从Android Debug信息中获得。
当总数也就是total这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了,多数时候,发生OOM 都是在做一些跟图片相关的操作
APP summary
再继续看上面图片 app summary
image.png
进程独占内存。也就是进程销毁时可以回收的内存容量。通常private Dirty内存是最重要的部分,因为只被自己进程使用。Dirty内存是已经被修改的内存页,因此必须常驻内存(因为没有swap);Clean内存是已经映射持久文件使用的内存页(例如正在被执行的代码),因此一段时间不使用的话就可以置换出去。
实际使用内存(PSS):
将跨进程共享页也加入进来, 进行按比例计算PSS。这样能够比较准确的表示进程占用的实际物理内存
通常我们需要关注PSS TOTAL 和 Private Dirty
Heap Viewer
事实查看内存分配情况和空闲内存大小
发现memory Leaks
AS中点击机器人图标打开Android Device Mointor, 如下:
选中进程进行Heap 分析,点击update heap, 查看右侧的heap标签页
image.png
Heap视图显示了堆内存使用的情况,每次垃圾回收都会更新,要查看更新情况, 点击Cause GC即可
我们需要在执行查看内存是否有泄漏的用例之前和之后执行GC,即手动点击Cause GC,观察allocated大小,查看内存是否在一个稳定的数值,多次操作,只要内存稳定,即没有内存泄漏, 如果不断变大,即表示有内存泄漏。
该工具也可以用来查看是否会发生内存抖动
网友评论