loli_profiler

Introduction: Memory instrumentation tool for android app&game developers.
More: Author   ReportBugs   
Tags:
LoliProfiler cat icon

LoliProfiler captures native allocations in Android applications and displays call stacks, a treemap, memory timeline, screenshots, and smaps data. The desktop GUI and headless capture CLI use the same Qt-free C++ core.

LoliProfiler showing a captured Android session with stacktrace, treemap, timeline, and screenshot

Comparison window with no capture data loaded

Compare opens dockable Base, Comparer, and Diff views for two captures. Comparison guide.

Build

From the repository root:

python scripts/build.py

The interactive menu builds the GUI, CLI, Android hooks, and release zip. SDK/NDK downloads require your confirmation. See the build guide for prerequisites, non-interactive commands, and Windows/macOS/Linux details.

The GUI's Console tab shows capture and load timings. GUI and CLI use the same logging API; add --log-file profiler.log to save timestamped diagnostics and --log-level debug for more detail. See the quick start.

Documentation

What the tools do

Tool Use
LoliProfilerImGui Launch or attach, inspect live/saved captures, and save .loli files.
LoliProfilerCLI Capture headlessly; export .txt or SQLite .db; compare captures; symbolize offline.
LoliProfilerCompare Compare two saved captures in independent, dockable Base/Comparer/Diff panels.
agentcli Python package Query the SQLite call tree from scripts or agents. The loli command remains available.

During capture, choose whether to keep every allocation record or retain only allocations still live at stop. In the Stacktrace panel, the All Allocations / Persistent selector changes the inspection view for saved records. Symbol names require a matching application library with suitable debug information.

Open-source components

The comparer builds on leoin2012's fork, whose Loli Compare module credits shuchangliu.

Project Role
Dear ImGui Dockable desktop interface.
ImGui-SFML ImGui rendering and event integration.
SFML Window, graphics, and device socket transport.
nativefiledialog-extended Native file and folder dialogs.
tiny-process-library ADB, Python, and symbol-tool subprocesses.
RapidJSON Application settings.
SQLite Indexed .db snapshot export and agent queries.
LZ4 Compressed capture packets.
xHook Android native allocation hooks.
Nougat_dlfunctions Android symbol lookup helper.

The Android hook also draws on upstream stack-trace and sampling techniques documented in Chromium and Perfetto. The JDWP injection approach is described in this article. Legacy toolbar assets credit Smashicons and Freepik.

License

See LICENSE and the licenses in each vendored component.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest