Tencent/loli_profiler
Memory instrumentation tool with CI and AI support for android app&game developers.
TL;DR
LoliProfiler 是一个用于 Android 应用的开源内存分析工具套件。它可捕获原生堆分配,显示调用栈、树图、时间线和截图,并支持对比两次运行。它提供图形化界面(基于 Dear ImGui 构建)和无头 CLI,还附带一个 Python 包,用于查询保存的数据。
功能
| 组件 | 功能 |
|---|---|
| LoliProfilerImGui | 桌面 GUI – 启动或附加到 Android 应用,查看实时或已保存的捕获,导出 .loli 文件。 |
| LoliProfilerCLI | 无头捕获,导出为纯文本或 SQLite,离线符号化,通过命令行比较捕获。 |
| LoliProfilerCompare | 专用 UI,支持并排加载两个捕获,带有可停靠的 Base、Comparer 和 Diff 面板。 |
| agentcli (Python) | 小型库,可打开 SQLite 快照(.db),并允许脚本查询调用树(使用 loli 命令)。 |
在捕获过程中,您可以选择保留所有分配记录,或仅保留停止时仍存活的记录。UI 支持在两种视图间切换。当您提供应用的调试符号文件时,会显示符号名称。
如何运行
- 构建 – 从仓库根目录运行
python scripts/build.py。该脚本会提供交互式菜单,用于编译 GUI、CLI、Android 钩子,并打包发布 ZIP。如果确认,它会自动下载 Android SDK/NDK。 - 前置条件 – 请参阅
docs/BUILD.md了解所需编译器、CMake 以及平台特定说明(Windows/macOS/Linux)。 - 快速入门 – 按照
docs/QUICK_START.md(或中文版)操作:- 构建工具
- 通过 ADB 连接设备
- 启动
LoliProfilerImGui附加到应用,进行捕获并探索结果
- 无头使用 – 使用
LoliProfilerCLI并加上--log-file profiler.log --log-level debug等标志,无 UI 捕获并导出数据。 - 对比 – 使用
LoliProfilerCompare或 CLI 的比较模式加载两个.loli文件,查看分配模式的差异。 - 脚本化 – 安装
agentcli包(在agentcli目录内运行pip install .),使用loli命令或导入库来查询 SQLite 快照。
哪些人可能用得上?
- 需要理解原生内存使用情况、发现内存泄漏或优化分配模式的 Android 开发者。
- 针对 Android 的 游戏开发者(文档包含与游戏引擎集成的部分)。
- 希望并排比较两个构建版本或运行时配置的 性能工程师。
- 构建围绕 Android 内存行为工具的研究人员;Python 代理使其易于编写自定义分析。
限制 / 注意事项
- 仅捕获 原生 分配(C/C++);Java 层分配不在范围之内。
- 符号解析需要应用的原生库以调试符号构建。
- UI 依赖 Dear ImGui/SFML,因此仅在桌面操作系统上运行,无法直接在设备上运行。
- 捕获开销非零;请留意“控制台”标签页的时间数据。
许可证与致谢
该项目采用 MIT 许可证(见 LICENSE)。它捆绑了多个宽松许可的第三方库(Dear ImGui、SFML、SQLite、LZ4 等),并基于 shuchangliu 的早期 loli_profiler 实现的分支构建。
以上所有信息均直接取自仓库的 README。
相关
- 项目
- 项目
- 项目
- 项目