Tencent/loli_profiler
Memory instrumentation tool with CI and AI support for android app&game developers.
TL;DR
LoliProfiler는 Android 앱을 위한 오픈소스 메모리 프로파일링 툴킷입니다. 네이티브 힙 할당을 캡처하고, 콜스택, 트리맵, 타임라인, 스크린샷을 표시하며, 두 번의 실행을 비교할 수 있습니다. 그래픽 UI(Deaр 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를 다운로드합니다. - 사전 요구 사항 – 필요한 컴파일러, CMake, 플랫폼별 참고사항은
docs/BUILD.md를 참조하세요. - 빠른 시작 –
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에 의존하므로 데스크톱 OS에서는 작동하지만, 직접 장치에서 실행은 불가.
- 캡처 오버헤드는 0이 아님; "콘솔" 탭의 타이밍을 주의 깊게 확인하세요.
라이선스 및 감사
프로젝트는 MIT 라이선스(see LICENSE)입니다. Dear ImGui, SFML, SQLite, LZ4 등 여러 허용적인 라이선스를 가진 제3자 라이브러리를 포함하며, shuchangliu가 만든 이전의 loli_profiler 구현의 포크를 기반으로 합니다.
위 정보는 리포지토리의 README에서 직접 가져왔습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트