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에서는 두 뷰를 전환할 수 있습니다. 앱의 디버그 심볼 파일을 제공하면 심볼 이름이 표시됩니다.

실행 방법

  1. 빌드 – 리포지토리 루트에서 python scripts/build.py를 실행합니다. 스크립트는 인터랙티브 메뉴를 제공하여 GUI, CLI, Android 훅을 컴파일하고 릴리스 ZIP을 패키징합니다. 필요 시 Android SDK/NDK를 다운로드합니다.
  2. 사전 요구 사항 – 필요한 컴파일러, CMake, 플랫폼별 참고사항은 docs/BUILD.md를 참조하세요.
  3. 빠른 시작 – docs/QUICK_START.md (또는 중국어 버전)을 따르세요:
    • 도구 빌드
    • ADB로 장치 연결
    • LoliProfilerImGui를 실행하여 앱에 연결하고 캡처, 결과 탐색
  4. 헤드리스 사용 – LoliProfilerCLI를 --log-file profiler.log --log-level debug와 같은 플래그로 실행하여 UI 없이 캡처하고 데이터를 내보냅니다.
  5. 비교 – LoliProfilerCompare 또는 CLI의 비교 모드를 사용해 두 개의 .loli 파일을 로드하고 할당 패턴의 차이를 확인합니다.
  6. 스크립팅 – 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에서 직접 가져왔습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트