Does Android DDMS provide APIs ? I need to automate the snapshot mechanism for the native heap. Or is there any post processing tool for analysis DDMS native heap snapshots.
I assume by snapshot you mean a heap dump.
From your app code you can call Debug.dumpHprofData()
to dump the data.
From a script you can call
adb shell am dumpheap <process> <file>
where <process>
is e.g. your process id or name, and <file>
is the dump file name. After that you can adb pull
the dump to your computer.
To analyze the heap dumps you can use e.g. jhat or MAT. Before that you need to run hprof-conv
(included in Android SDK) on the dump to convert it from Dalvik format to standard Java format.
Further reading: Memory Analysis for Android Applications
@laalto's answer is not quite correct
From a shell you can do the following to get a heap dump for the application using adb.
Note: Replace 19000 with the process ID of your running application. The filepath must be a filepath which your application has write access to on the Android device.
Create a heap dump:adb shell am dumpheap 19000 /sdcard/Documents/android.hprof
Pull the file to your machine:adb pull /sdcard/Documents/android.hprof
Convert to a hprof file readable by an analyzer:hprof-conv android.hprof mat.hprof
Tips: Get process ID of your application:
adb shell ps | grep com.sample.application | cut -c10-15
Get process ID and dump heap:
adb shell am dumpheap `adb shell ps | grep com.sample.application | cut -c10-15` /sdcard/Documents/android.hprof
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With