native heapのメモリリークを調べたいとき

DDMSでnativeのallocateされたサイズと回数を見ることができます。
freeが行われると、回数カウントはちゃんとデクリメントされるようなので、ある操作をし続けてカウントがどんどん増えていく奴がリークの可能性大ということですね。

まず、ターゲット端末の
/system/libにlibc_malloc_debug_leak.soがあるかどうかを確認。
あれば、そのまま次に進みます。
ない場合、TARGET_BUILD_VARIANT=engにしてAndroid OS全体の再ビルド&焼き直しが必要です。

make TARGET_BUILD_VARIANT=eng

ここでその環境のない人はThe endですかね。

次にターゲット端末で以下のようにします。

adb shell setprop libc.debug.malloc 1
adb shell stop
adb shell start

~/.android/ddms.cfgに"native=true"を追加して、ddmsを起動します。このときEclipseと同時に起動するとプロセス欄が?だらけになるので、Eclipseを起動している場合は終了します。(Android SDK Ver. 13時点)
EclipseのDDMSではこれだけではできません。出来る方法があるという噂ですがやってません。

これでDDMSにNative Heapタブが出現するので、自分が調べたいプロセスを左側で選択し、調べたいタイミングでFull Updateボタンを押します。
すると、Listに変化があると思います。ない場合はsetprop等をやっているか再確認してください。

Display項目はAllocation Listだと観にくかったので、By Librariesにすると見やすくなります。
これで、Total size多い順にソートされ、そのうち一つを選択するとスタックトレースらしきログも見れます(ただクリックしてもListが隠れてしまっているので、マウスで引き出したりと変な動作が必要ですが…)ので、誰がどれだけのサイズを何回allocしたかわかります。

さらにシンボル名まで出す手段があるようですが(またビルドが必要?)、やってません。

参照URL
http://d.hatena.ne.jp/androidzaurus/20090806/1249548020