HAHA

Additional

Language
Java
Version
haha-2.0.3 (May 17, 2016)
Created
Apr 22, 2015
Updated
Apr 25, 2019
Owner
Square (square)
Contributors
Tobias Preuss (johnjohndoe)
Jesse Wilson (swankjesse)
PY (pyricau)
Adam Koski (dandc87)
Joe Bowbeer (joebowbeer)
John Rodriguez (jrodbx)
nicholasdower
7
Activity
Badge
Generate
Download
Source code

Announcement

Headless Android Heap Analyzer

“Ha Ha!” - Nelson

This repository is DEPRECATED

  • This project was created to provide a heap dump parser for LeakCanary by repackaging heap dump parsers from other repositories.
  • LeakCanary now has its own heap dump parser.
  • That parser is available on Maven Central as com.squareup.leakcanary:leakcanary-haha:2.0-alpha-1.

Introduction

HAHA is a Java library to automate the analysis of Android heap dumps.

This project is essentially a repackaging of the work of others to make it available as a small footprint Maven dependency.

Usage

To learn how to dump the heap, read the Android documentation. Here's an example:

File heapDumpFile = ...
Debug.dumpHprofData(heapDumpFile.getAbsolutePath());

After dumping the heap, use HAHA to parse and analyze it.

DataBuffer buffer = new MemoryMappedFileBuffer(heapDumpFile);
Snapshot snapshot = Snapshot.createSnapshot(buffer);

// The rest is up to you.
ClassObj someClass = snapshot.findClass("com.example.SomeClass");

Gradle config

dependencies {
  compile 'com.squareup.haha:haha:2.1'
}

Versions

HAHA 2.1

HAHA 2.0.4

This release separates out Trove4j from HAHA since Trove4j is available under LGPL 2.1 and HAHA is available under Apache 2.

  • This library contains parts of perflib and is available under the same license, Apache v2.
  • It contains a repackaged version of Guava
  • It has an artifact dependency on a fork of Trove4j ("1.1 with patches from JetBrains") which is available in jcenter under the LGPL 2.1 license.
  • The result is merged in an uber-jar (perflib + guava) proguarded to remove unused code and reduce the footprint.

HAHA 2.0, 2.0.1, 2.0.2, 2.0.3

  • This library contains parts of perflib and is available under the same license, Apache v2.
  • It contains a repackaged version of Guava and Trove4j "1.1 with patches from JetBrains"
  • Trove4j is available under the LGPL 2.1 license.
  • The result is merged in an uber-jar proguarded to remove unused code and reduce the footprint.

HAHA 1.1, 1.2 and 1.3

  • The first versions of HAHA were the result of a series of forks:
  • Eclipse Memory Analyzer (MAT) is a Java heap analyzer. It's a standalone GUI built with Eclipse RCP that embeds an engine to parse and analyze heap dumps.
  • vshor/mat is a fork of Eclipse Memory Analyzer. It removed a lot of code and changed some of it to make a headless version (no GUI), as well as ignore weak references when finding paths to GC Roots.
  • AndroMAT is a fork of vshor/mat and changed the heap dump parsing to support Android specific heap dump format.
  • HAHA was originally a fork of AndroMAT. We recreated the lost Git history, kept the bare minimum needed code and packaged it to be releasable on Maven Central.
  • MAT is available under the Eclipse Public License v1.0 so HAHA was initially released under that same license.

Releasing

mvn release:prepare && mvn release:perform