如何自动化DDMS快照机制?

Nar*_*mar 4 android ddms android-ndk android-testing

Android DDMS是否提供API?我需要自动化本机堆的快照机制.或者是否有任何用于分析DDMS本机堆快照的后处理工具.

laa*_*lto 10

我假设你的快照意味着堆转储.

从您的应用代码中,您可以调用Debug.dumpHprofData()转储数据.

从您可以调用的脚本

adb shell am dumpheap <process> <file>
Run Code Online (Sandbox Code Playgroud)

这里<process>是比如你的进程ID或名称,并且<file>是转储文件名.之后,您可以adb pull转储到您的计算机.

要分析堆转储,您可以使用例如jhat或MAT.在此之前,您需要hprof-conv在转储上运行(包含在Android SDK中)以将其从Dalvik格式转换为标准Java格式.

进一步阅读:Android应用程序的内存分析


vma*_*man 7

@ laalto的答案不太正确

在shell中,您可以执行以下操作以使用adb为应用程序获取堆转储.

注意:19000替换为正在运行的应用程序的进程ID.文件路径必须是您的应用程序在Android设备上具有写入权限的文件路径.

创建堆转储:
adb shell am dumpheap 19000 /sdcard/Documents/android.hprof
将文件
adb pull /sdcard/Documents/android.hprof
拉到您的机器:转换为分析器可读的hprof文件:
hprof-conv android.hprof mat.hprof

提示:获取应用程序的进程ID:

adb shell ps | grep com.sample.application | cut -c10-15

获取进程ID和转储堆:

adb shell am dumpheap `adb shell ps | grep com.sample.application | cut -c10-15` /sdcard/Documents/android.hprof